我有一种情况,我需要允许当前登录的用户在 cakephp 中更改他的用户名。当我更新数据库中的用户名时,它不会反映在
$this->Auth->user('username')
即使在更改数据库中的记录后 $this->Auth->user('username') 也会给出相同的旧用户名,因为它保存在当前会话中。
谁能帮我更新当前的 $this->Auth 会话数据
提前致谢
AuthComponent 在登录时将用户的属性存储在会话中。更新数据库中的用户数据不会自动更新会话中的这些更改,因此您必须在成功将更改保存到数据库后自己执行此操作;
虽然用户已经登录,但手动登录用户,也会更新 Session 内的数据(参见此处的源代码:https ://github.com/cakephp/cakephp/blob/master/lib/Cake/Controller/组件/AuthComponent.php#L543 )
像这样的东西;
if ($this->User->save($this->request->data)) {
// Succesfully update the user
// update the users data inside the session
$this->Auth->login($this->request->data);
// and redirect somewhere else
return $this->redirect(array('controller' => 'pages', 'action' => 'display', 'home'));
}
尽管您可以通过会话组件更新会话数据来实现相同的目的,但通过 AuthComponent 执行此操作更容易,因为它会自动将数据存储在会话内的正确位置:)
另请参阅:识别用户并登录
note因为您没有提及您使用的是什么版本的 CakePHP,所以我假设 CakePHP 2.x
更新数据库中的新名称后,您只需更新会话中的名称,如下所示:
$this->Session->write('Auth.User.name', $new_username);
这行代码将在同一会话中更新用户名。
您只需更改用户名的会话数据
$this->Session->write('Auth.User.username') = $newusername;
例如
$this->Session->write('Auth.User.username') = $this->request->data['User']['username'];