
ログインユーザーがユーザー名を変更した場合
よくある「ようこそ○○さん」と表記させていると
○○の部分が変更しても変わらないという現象があります。
そこを変更後も表示が変わるようにしました。
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() も更新する方法
