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の処理を書くとか考えたけど全体にかかるのでないっぽい