CakePHPはとても便利で、認証も簡単に実装することができます。ただ今回は、便利すぎる、全自動に近いが故にはまってしまいました。
CakePHPの認証コンポーネントで、ログインに成功すると自動でリダイレクトしてくれるのですが、そのリダイレクト先を変更したくても制御する方法が分からず、はまってしまいました。
忘れないようにメモしておきます。
環境
- CakePHP1.3.8
- CakePHP標準の認証コンポーネント(Auth)を使用
考え方
- 認証コンポーネント(Auth)は自動でリダイレクトしてくれるので、まずリダイレクト機能を抑える
- リダイレクト機能を抑えた上で、手動でリダイレクト先を指定する
リダイレクトを抑える
beforeFilterを使います。リダイレクトを抑えたいController内(例えばapp/controller/users_controller.php)に、以下を記述します。
function beforeFilter() {
$this->Auth->autoRedirect = false; //リダイレクト機能をオフにする
}
これでログインしてもリダイレクトしません。
手動でリダイレクト先を指定する
記述的には普通ですが、一応コードを書いておきます。(例えばapp/controller/users_controller.phpのloginファンクション)
function login(){
if($this ->data){
//ログイン試みる
$user = $this->Auth->user();
//ログインを試みた結果成功か、失敗か
if(!empty($user)){
//ログインが成功した時の処理
$this->redirect('/posts'); //好きな場所へリダイレクト
}else{
//ログインが失敗した時の処理
echo "ログイン失敗";
}
}
}