Session 编辑信息CAKEPHP后刷新用户会话数组
我想知道如何在用户更新其信息后重新加载数组(Auth.User) 目前,这种情况不会发生,直到用户注销然后重新登录,因为此时它加载了数组(Auth.user) 到目前为止,我已经尝试了一些解决方案 我还尝试添加Session 编辑信息CAKEPHP后刷新用户会话数组,session,cakephp,cakephp-2.3,Session,Cakephp,Cakephp 2.3,我想知道如何在用户更新其信息后重新加载数组(Auth.User) 目前,这种情况不会发生,直到用户注销然后重新登录,因为此时它加载了数组(Auth.user) 到目前为止,我已经尝试了一些解决方案 我还尝试添加 $user=$this->user->field('name',array('user.id'=>$this->Session->read('Auth.user.id')); $this->Session->write('Auth.User',$User) 进入应用程序控制器 但都没有成
$user=$this->user->field('name',array('user.id'=>$this->Session->read('Auth.user.id'));
$this->Session->write('Auth.User',$User)代码>
进入应用程序控制器
但都没有成功
谢谢你就快到了。请记住,返回的数组$user
包含一个“user”键,例如:
array(
'User' => array(
'id' => 1
)
)
因此,将其保存到Auth.User
下的会话实际上会像这样保存会话数组:
array(
'Auth' => array(
'User' => array(
'User' => array(
'id' => 1
)
)
)
)
相反,将其保存到Auth密钥中,您可以像正常情况一样继续访问它:
$user = $this->User->field('name', array(
'User.id' => $this->Session->read('Auth.User.id')
));
$this->Session->write('Auth', $user);
现在会话密钥已清除,有一种更简单、更快捷的方法可以重新登录用户,如注释中所述:使用$this->Auth->login()
在我的例子中,我使用的是CakePHP4
我已加载身份验证组件
我正在使用此代码刷新我的身份验证信息
$user = (new UserService())->Users;
$user = $user->find()->where(['Users.id' => $this->userId])->contain(['RELATION1', 'RELATION2'])->first();
$this->Authentication->setIdentity($user);
现在您可以使用
$this->Authentication->getIdentity()->getOriginalData();
您也可以只使用$this->Auth->login($user);因为这也会更新身份验证会话数据是的,这确实很好。我将把它添加到答案中。我的大脑仍然停留在1.3中。仅供参考,当您将数据发送到Auth::login时,您必须发送您的用户数据,而不是您的用户[usermodel]数据,否则您将在Auth会话中写入不好的内容。就我个人而言,Auth::login应该知道您传递的是平面数组还是嵌套数组,但它不知道。例如,您需要这样做:$user=$this->UserModelClass->findById($userId)$this->Auth->login($user[$this->UserModelClass->alias]);
$this->Authentication->getIdentity()->getOriginalData();