2013年5月24日金曜日

[CakePHP]ブラウザを閉じでもログイン状態を保持する方法

このぺージを参考にさせて頂く。

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

コメントを投稿