CakePHPのAuthのredirect
以下
$this->Auth->autoRedirect = false;
になっている前提
CakePHPの設計上,認証が通ったあと,以前認証が必要だったurlならそこへ,それがない場合webrootに飛ばされる.
今回は認証が必要だったurlがない場合,webrootから変更する際のお話
loginの後の処理にかくのが王道だと思うけど,そのとき使うであろう「$this->Auth->redirect();」について
この関数は中身を見てみると呼び出されたときにSessionのurlを一旦消しているので
loginの後の処理に書く場合,2度以上使用するともちろん以前のurlが変更される
つまり,「以前認証が必要だったurlならそこへ,そうでないならwebroot以外に飛ばす」処理を書く場合,「$this->Auth->redirect();」は変数として関数内に格納しとかないといけない.
上記のことを書くと
<?php class AdminController extends AppController { var $uses = null; var $components = array('Auth'); function beforeFilter() { parent::beforeFilter(); $this->Auth->autoRedirect = false; } function login() { if($this->Auth->user()) { $url = $this->Auth->redirect(); if($url == DS) { $this->redirect('/admin'); } else { $this->redirect($url); } exit(); } } function logout() { $this->redirect($this->Auth->logout()); exit(); } } ?>
なんかつまずいたのでメモしときました
あとconfig/routes.phpでwebrootの処理を書くとか考えたけど全体にかかるのでないっぽい