自動ログイン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 件のコメント:
コメントを投稿