スポンサードリンク
ログインユーザーがユーザー名を変更した場合
よくある「ようこそ○○さん」と表記させていると
○○の部分が変更しても変わらないという現象があります。
そこを変更後も表示が変わるようにしました。
スポンサードリンク
Authはセッション情報を読んでいる
Userテーブルを使ってログインするようにすると
Authコンポーネントにログイン情報が入っています。
で、usernameフィールドを変更したとしても
フィールドの値が変更されただけで
セッションの値は変更されていなかったんですね。
なので、フィールドを変更したら
セッション情報も変更するようにすればいいということです。
Userコントローラーを少し編集します。
Controller/UsersConttoller.php
※editというアクション編集するという仮定です。
function edit($id = null) { if (!$id) { throw new NotFoundException(__('エラー:【戻る】を押して下さい!')); } $user = $this->User->findById($id); if (!$user) { throw new NotFoundException(__('エラー:データがありません【戻る】を押して下さい!')); } // POST送信なら if($this->request->is('post') || $this->request->is('put')) { $this->User->create(); if ($this->User->save($this->request->data)) { //変更できたらusernameは更新する $user = $this->User->find('first', array('conditions' => array('id' => $this->Auth->user('id')), 'recursive' => -1)); $this->Session->write('Auth', $user); $this->Session->setFlash(__('変更しました')); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('変更できませんでした。やり直して下さい')); } } //指定プライマリーキーのデータをセット $this->request->data = $user; }
saveメソッドで編集できたら
AuthコンポーネントにあるIDでテーブルの値を読み込んで
セッションを書き換えるということです。
こうすると、
「ようこそ○○さん」という表記をしていた場合は
usernameを変更した後、表記が変わります。
自動では変わらないんですね。
こういう表記をしていなかったら
この作業はいりません。
こちらを参考にさせていただきました。
(参考)
CakePHP – usersテーブルを更新した際に $this->Auth->user() も更新する方法
スポンサードリンク