如何在cakephp中编辑用户配置文件后更改auth用户名

时间:2013-05-10 22:05:48

标签: php cakephp

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

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

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

任何人都可以帮助我更新当前的$ this-> Auth会话数据

提前致谢

3 个答案:

答案 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'];