cakePHP 2.4 で、Auto Loginを実装した。
その手順をメモ。
まず、使用したコンポーネントはこちら。
http://milesj.me/code/cakephp/auto-login
ただしこれは注意書きにあるように、2.Xでは非推奨になっているので、最新版を下からいただく。
http://milesj.me/code/cakephp/utility
こちらをダウンロードして、使うのはContoroller/Component/AutoLoginComponent.php。
※探してみたところ、こちらにアップデートのお知らせがあった。
http://milesj.me/blog/read/upgrading-ajaxhandler-1.6-3
実装の方法は、上のページと変わらない様だ。
1.AppControllerでComponentの追加。
(username => emailとしてるは、認証時のユーザー名をemailしているため。)
public $components = array( 'AutoLogin', // 追加 'Auth' => array( 'authenticate' => array( 'Form' => array( 'fields' => array('username' => 'email') ) ), 'authorize' => array( 'Actions' => array('actionPath' => 'controllers') ) ), 'Session' );
2.loginフォーム(僕の場合はuser/login.ctp)にチェックボックスの追加
echo $this->Form->input('auto_login', array('type' => 'checkbox', 'label' => 'Log me in automatically?'));
3.Model, Contoroller, Cookie名やExpire時間の設定。AppController::beforeFilter()で行う。
(僕の場合は Model => User, Contoroller => login, logout となる。usernameではなくemailを使っているので、そこも。)
public function beforeFilter() { $this->AutoLogin->settings = array( // Model settings 'model' => 'User', 'username' => 'email', 'password' => 'password', // Controller settings 'plugin' => '', 'controller' => 'user', 'loginAction' => 'login', 'logoutAction' => 'logout', // Cookie settings 'cookieName' => 'rememberMe', 'expires' => '+1 month', // Process logic 'active' => true, 'redirect' => true, 'requirePrompt' => true ); }
Process Logicの補足があったのでここに。
・active(bool:true) -> auto loginをONにするか。
・redirect(bool:true) -> ログイン後にredirectするか。
・requirePrompt(bool:true) -> checkboxの有無に関わらず、auto loginする。
4.Addditional Callback
僕は使っていないが、コールバック関数も用意されているらしい。
class AppController extends Controller { /** * Run whenever auto login is successful. * * @param array $user - The Auth user session */ public function _autoLogin($user) { } /** * Run whenever auto login fails. * * @param array $cookie - The login cookie data */ public function _autoLoginError($cookie) { } }