たきゃはしです

Webとかデザインとかプログラムとか

CakePHP - usersテーブルを更新した際に $this->Auth->user() も更新する方法



データは更新されていても表示は変わらない・・・



 id:hiromi2424 様からのコメントで他の方法があるそうなのでこちらもご覧ください。
 私自身未検証ですが、かなり有力な情報であると思います。


CakePHPのAuthコンポーネントによるログインは
認証に成功するとユーザ情報をセッションに保存します。


保存したセッションは、$this->Auth->user()で取得可能です。


すごく便利なんですけど
usersテーブルが更新されても、Cakeは自動的にセッションを更新しません。


その対策として、usersテーブルが更新された際に使える
セッションを最新にする関数を紹介します。(自動ではないです

// Auth.userのセッションを更新する
function _update_session_auth_user() {
    $this->loadModel('User'); // Userモデルを読み込んでいるなら消してもOK
    $user = $this->User->find('first', array('conditions' => array('id' => $this->Auth->user('id')), 'recursive' => -1));
    unset($user['User']['password']); // 念のためパスワードは除外。どうでもよければ消してもOK
    $this->Session->write('Auth', $user);
}


これで『$this->Auth->user()』に関しては特に問題はなくなりました。


  • -

PHP 5.3
CakePHP 1.3.7