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には、次のような「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);

セッションキーがクリアされたので、マークがコメントで述べているように、ユーザーに再ログインするためのはるかに簡単で迅速な方法があります:use $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

私の場合、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();
于 2021-01-08T08:47:51.097 に答える