4

我想知道如何在用户更新他们的信息后重新加载数组(Auth.User)。

目前这不会发生,直到用户注销然后重新登录,因为那是它加载数组(Auth.User)的时候。

到目前为止,我已经尝试了一些解决方案,例如.

我也尝试添加 $user = $this->User->field('name', array('User.id' => $this->Session->read('Auth.User.id'))); $this->Session->write('Auth.User', $user); 到应用程序控制器中。

但没有一个是成功的。

谢谢

4

2 回答 2

6

你就在那儿。请记住,返回的数组$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()

$user = $this->User->field('name', array(
  'User.id' => $this->Session->read('Auth.User.id')
)); 
$this->Auth->login($user);
于 2013-02-13T15:27:17.813 回答
1

就我而言,我使用的是 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();
于 2021-01-08T08:47:51.097 回答