CakePHP2 特定のidでログイン状態にする方法
CakePHPAuthコンポーネントでの認証は一般的に、ユーザーにusernameとpasswordを送信してもらい、$this->Auth->login()で認証を行います。(規約に則った場合)
が、時々そういった行程を伴わずとも、サーバサイドで自動的にログインを許可したい場合があります。
例)
- 自分しかログインしないアプリケーションで、IPや端末など、特定の条件を満たしていればアクセスしただけでログイン状態にしたい場合。
- 会員向けサービスで、メール認証→ユーザー登録完了後、初回ログインの手間を省いてあげたい時。
実装方法
Authコンポーネントをロードしたコントローラーで以下のように記述すると、自動的にログインが可能です。
ただし許可する条件はよく吟味し、不正ログインにはくれぐれも注意して実装してください。
//ログインさせたいユーザーのid
$id = 2;
//ユーザーデータを取得
$user = $this->User->find('first', array(
'conditions' => array('User.id' => $id),
'recursive' => -1
)
);
//パスワードを削除
unset($user['User']['password']);
//['User']キー内をloginメソッドに渡す
if ($this->Auth->login($user['User'])) {
//ログイン後にしたい処理
//…
}
実は…
同様のことがCookbookにも記載されています。 http://book.cakephp.org/2.0/ja/core-libraries/components/authentication.html#id16
「手動でのユーザログイン」と紹介されているのが個人的にちょっとわかりずらかったので記事にしてみました。