0

我有一种情况,我需要允许当前登录的用户在 cakephp 中更改他的用户名。当我更新数据库中的用户名时,它不会反映在

 $this->Auth->user('username')

即使在更改数据库中的记录后 $this->Auth->user('username') 也会给出相同的旧用户名,因为它保存在当前会话中。

谁能帮我更新当前的 $this->Auth 会话数据

提前致谢

4

3 回答 3

3

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

于 2013-05-10T22:19:06.380 回答
3

更新数据库中的新名称后,您只需更新会话中的名称,如下所示:

$this->Session->write('Auth.User.name', $new_username);

这行代码将在同一会话中更新用户名。

于 2017-10-06T10:57:13.470 回答
0

您只需更改用户名的会话数据

$this->Session->write('Auth.User.username') = $newusername;

例如

 $this->Session->write('Auth.User.username') = $this->request->data['User']['username'];
于 2013-05-11T23:52:40.517 回答