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