cakePHP : Auto Loginの実装

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) {
	}

}