From 040a1f35513dfe72573b5fdd82d949a1210d00ae Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 24 Dec 2025 11:38:21 +0800 Subject: [PATCH] * [refac bug #67692] Delete im_userdevice when change password. --- module/user/model.php | 2 ++ module/user/tao.php | 16 +++++++++ module/user/test/tao/deleteimuserdevice.php | 40 +++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 module/user/test/tao/deleteimuserdevice.php diff --git a/module/user/model.php b/module/user/model.php index 6098baf364..4f4effcb61 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -690,6 +690,7 @@ class userModel extends model } if(dao::isError()) return $this->rollBack(); + if(!empty($user->password) && $user->password != $oldUser->password) $this->userTao->deleteImUserDevice($user->id); $this->dao->commit(); @@ -838,6 +839,7 @@ class userModel extends model $this->dao->update(TABLE_USER)->set('password')->eq($user->password)->where('id')->eq($this->app->user->id)->exec(); if(dao::isError()) return false; + $this->userTao->deleteImUserDevice($this->app->user->id); $this->loadModel('score')->create('user', 'changePassword', $this->computePasswordStrength($user->password1)); $this->app->user->password = $user->password; diff --git a/module/user/tao.php b/module/user/tao.php index 1eac761d7b..d8feec6133 100644 --- a/module/user/tao.php +++ b/module/user/tao.php @@ -138,4 +138,20 @@ class userTao extends userModel ->groupBy('execution') ->fetchPairs(); } + + /** + * 删除 im_userdevice 表该用户的数据,以防止禅道修改密码后,禅道大桌面记住密码还能登录 + * Delete the im_userdevice table data of the user to prevent the user from logging in after the password is modified + * + * @param int $userID + * @access public + * @return void + */ + public function deleteImUserDevice(int $userID): void + { + try + { + $this->dao->delete()->from(TABLE_IM_USERDEVICE)->where('user')->eq($userID)->exec(); + } catch (Exception $e) {} + } } diff --git a/module/user/test/tao/deleteimuserdevice.php b/module/user/test/tao/deleteimuserdevice.php new file mode 100644 index 0000000000..61ba12f279 --- /dev/null +++ b/module/user/test/tao/deleteimuserdevice.php @@ -0,0 +1,40 @@ +#!/usr/bin/env php +deleteImUserDevice(); +cid=0 + +- 执行$oldTokens @2 +- 执行$oldTokens[1] + - 属性user @1 + - 属性device @zentaoweb + - 属性token @1 +- 执行$oldTokens[2] + - 属性user @1 + - 属性device @desktop + - 属性token @2 +- 执行$newTokens @0 + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; + +zenData('user')->gen(3); +$userdevice = zenData('im_userdevice'); +$userdevice->user->range('1-3{2}'); +$userdevice->device->range('zentaoweb,desktop'); +$userdevice->token->range('1-10'); +$userdevice->gen(4); + +su('admin'); + +global $tester, $app; +$userModel = $tester->loadModel('user'); + +$oldTokens = $userModel->dao->select('*')->from(TABLE_IM_USERDEVICE)->where('user')->eq($app->user->id)->orderBy('id')->fetchAll('id'); +$userModel->deleteImUserDevice($app->user->id); +$newTokens = $userModel->dao->select('*')->from(TABLE_IM_USERDEVICE)->where('user')->eq($app->user->id)->fetchAll('id'); + +r(count($oldTokens)) && p() && e(2); +r($oldTokens[1]) && p('user,device,token') && e('1,zentaoweb,1'); +r($oldTokens[2]) && p('user,device,token') && e('1,desktop,2'); +r(count($newTokens)) && p() && e(0); \ No newline at end of file