【问题标题】:how to change auth username after user profile edit in cakephp在 cakephp 中编辑用户配置文件后如何更改身份验证用户名
【发布时间】:2013-05-10 22:05:47
【问题描述】:

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

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

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

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

提前致谢

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    AuthComponent 在登录时将用户的属性存储在会话中。更新数据库中的用户数据不会自动更新会话中的这些更改,因此您必须在成功将更改保存到数据库后自己执行此操作;

    更新后手动登录

    虽然用户已经登录,但手动登录用户,也会更新 Session 内部的数据(查看源代码: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'));
    }   
    

    虽然您可以通过会话组件更新会话数据来实现相同的目的,但通过 AuthComponent 执行此操作更容易,因为它会自动将数据存储在会话内的正确位置:)

    另见:Identifying users and logging them in

    注意因为你没有提到你使用的是什么版本的 CakePHP,我假设 CakePHP 2.x

    【讨论】:

    • 正确的解决方案@theJeztah.. 很棒
    • @liyakat 谢谢!我认为这将是比手动更新会话更清洁的解决方案,因为这将涉及通过AuthComponent::$sessionKey 在会话中获取正确的“密钥”
    • 这种方法的问题可能是,如documentation,或者您的源链接说,如果您将参数传递给登录函数,“该数据将存储为登录用户" - 这意味着只有请求中的值将存储在会话中,而不是完整的用户信息,因为 cake 在登录期间通常从数据库中获取它
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      例如

       $this->Session->write('Auth.User.username') = $this->request->data['User']['username'];
      

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 2017-07-20
        • 2019-10-22
        • 1970-01-01
        相关资源
        最近更新 更多