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

v09wglhw  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(104)

我想知道如何在用户更新信息后重新加载阵列(Auth.User)。
目前,这种情况不会发生,直到用户注销,然后重新登录,因为这是当它加载阵列(验证用户)。
到目前为止,我已经尝试了几个解决方案such as
我也尝试过将$user = $this->User->field('name', array('User.id' => $this->Session->read('Auth.User.id'))); $this->Session->write('Auth.User', $user);添加到应用程序控制器中。
但都没有成功。
谢谢

v1l68za4

v1l68za41#

你就快完成了。记住返回的数组$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);

现在会话密钥已经被清除,有一种更简单、更快的方法来重新登录用户,正如mark在注解中所说的:请使用$this->Auth->login()

$user = $this->User->field('name', array(
  'User.id' => $this->Session->read('Auth.User.id')
)); 
$this->Auth->login($user);
guykilcj

guykilcj2#

在我的例子中,我使用的是CakePHP 4,
我已经加载了身份验证组件。
我正在使用此代码刷新我的身份验证信息。

$user = (new UserService())->Users;
$user = $user->find()->where(['Users.id' => $this->userId])->contain(['RELATION1', 'RELATION2'])->first();

$this->Authentication->setIdentity($user);

现在,您可以使用以下命令获取登录用户的数据...

$this->Authentication->getIdentity()->getOriginalData();

相关问题