* [refac bug #67692] Delete im_userdevice when change password.

This commit is contained in:
wangyidong
2025-12-24 11:38:21 +08:00
parent 366e3039dd
commit 040a1f3551
3 changed files with 58 additions and 0 deletions
+2
View File
@@ -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;
+16
View File
@@ -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) {}
}
}
@@ -0,0 +1,40 @@
#!/usr/bin/env php
<?php
/**
title=测试 userTao->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);