Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 编辑信息CAKEPHP后刷新用户会话数组_Session_Cakephp_Cakephp 2.3 - Fatal编程技术网

Session 编辑信息CAKEPHP后刷新用户会话数组

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) 进入应用程序控制器 但都没有成

我想知道如何在用户更新其信息后重新加载数组(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
包含一个“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();