我有一种情况,我需要允许当前登录的用户在cakephp中更改其用户名。 当我更新数据库中的用户名时,它没有反映在
中 $this->Auth->user('username')
即使更改了数据库中的记录$ this-> Auth-> user('username')也会提供相同的旧用户名,因为它保存在当前会话中。
任何人都可以帮助我更新当前的$ this-> Auth会话数据
提前致谢
答案 0 :(得分:3)
AuthComponent在登录时将用户的属性存储在会话中。更新数据库中的用户数据不会自动更新会话内的更改,因此您必须在成功保存对数据库的更改后自行完成;
虽然用户已经登录,但手动记录用户,也会更新会话内的数据(参见此处的来源:https://github.com/cakephp/cakephp/blob/master/lib/Cake/Controller/Component/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'));
}
虽然您可以通过Session-component更新会话数据来实现相同目的,但通过AuthComponent执行此操作更容易,因为它会自动将数据存储在会话内的正确位置:)< / p>
另见:Identifying users and logging them in
注意因为您没有提到您正在使用的CakePHP版本,我假设CakePHP 2.x
答案 1 :(得分:2)
更新数据库中的新名称后,您只需更新会话中的名称,如下所示:
$this->Session->write('Auth.User.name', $new_username);
这行代码将更新同一会话中的用户名。
答案 2 :(得分:0)
您只需更改用户名
的会话数据即可$this->Session->write('Auth.User.username') = $newusername;
例如
$this->Session->write('Auth.User.username') = $this->request->data['User']['username'];