Authコンポーネントで、ログイン後の遷移先を固定する
cakephp 1.2.2を利用してます。
AuthComponentを使っている場合、ログイン後の遷移先を指定する場合、
UsersコントローラのbeforeFilterなどで
$this->Auth->loginRedirect = array('controller' => 'hoge', 'action' => 'view');
と指定しますが、セッション情報の中に、Authのリファラ情報が記録されている場合は、このリファラ情報が優先されてしまうため、ログイン後の遷移先を固定したい場合には不向きです。
(CakeBookにはこのことが書いてありませんが、authコンポーネントのソースコードのコメントに下記内容が書いてありましたorz)
If this session value is not set, the user will be redirected to the page specified in $loginRedirect.
セッション情報の中にAuthのリファラ情報が記録されるのは、authコンポーネントを読み込んでるコントローラの画面にアクセスした時で、例えば認証成功後にしか見えないページAにアクセスしてログイン画面に戻された場合、ページAのurlがAuthのリファラ情報としてセッションの中に書き込まれます。
今回、ログイン時にセッション情報の中のリファラ情報を強制的に消す処理を加えることによって、ログイン後の遷移先を固定することにしました。
users_controller.phpにて
function beforeFilter(){ $this->Auth->loginRedirect = array('controller' => 'hoge', 'action' => 'view'); } function login(){ $this->Session->delete('Auth.redirect'); }
他に何か方法があるよって言う方は教えてください〜