自動ログイン2
ただし、自分のサイトの場合はもっとシンプルにした。
・passportsテーブルは作らず、Usersテーブルにpassportカラムを追加
→テーブル作る必要ない。
・有効期限カラムは必要ないと思う。
→Cookie自体に有効期限があるから、わざわざDBの値とチェックする必要ない。
・__passportDeleteや__passportWriteのメソッドは作らない。
→Auth->login()やAuth->logout()の直後に書けばよいだけ。
・cookieのチェックはapp_controllerのbeforeFilterにて行う。
→どのぺージにランディングされてもチェックしてくれるから。
UsersControllerのlogin()アクションあたり。当然この前に、$this->expire(cookieの有効期限)の設定やpassportカラムへSecurity::generateAuthKey()などを使った値の保存はしておく。
ちなみに、上記のサイトだと、「
$this
->Cookie->write(
'User'
,
$cookie
, true,
"+ "
.
$this
->expires); 」となっていたが、"+"があるとうまく動作しなかったのではずした。Cakeのバージョン違いだろうか。
$this->Auth->login($user); if($this->Auth->_loggedIn){ $pass = array('Passport'=>$this->Auth->user('passport')); $this->Cookie->write('pass', $pass, true,$this->expires); }
以下のように、もしログインされていなかったら→Cookieにパスポートがあるか確認。
というのをどのぺージでもするように、app_controllerのbeforeFilterで以下をやる。
if(!$this->Auth->_loggedIn){ $cookiePassport=$this->Cookie->Read('pass'); if(!empty($cookiePassport)){ $cookieUser=$this->User->find('first',array('conditions'=>array( 'User.passport'=>$cookiePassport['Passport'] ))); if(!empty($cookieUser)){ $this->Auth->login($cookieUser); } } }
0 件のコメント:
コメントを投稿