在 cakephp 中编辑用户配置文件后如何更改身份验证用户名
Posted
技术标签:
【中文标题】在 cakephp 中编辑用户配置文件后如何更改身份验证用户名【英文标题】:how to change auth username after user profile edit in cakephp 【发布时间】:2013-05-10 22:05:47 【问题描述】:我有一种情况,我需要允许当前登录的用户在 cakephp 中更改他的用户名。 当我更新数据库中的用户名时,它不会反映在
$this->Auth->user('username')
即使在更改数据库 $this->Auth->user('username') 中的记录后,仍会提供相同的旧用户名,因为它保存在当前会话中。
谁能帮我更新当前的 $this->Auth 会话数据
提前致谢
【问题讨论】:
【参考方案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'];
【讨论】:
以上是关于在 cakephp 中编辑用户配置文件后如何更改身份验证用户名的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP - 如何在更改语言和重新加载路由表后翻译当前 URL
CakePHP hasOne belongsTo 关系,编辑/添加相同动作