2011年12月17日土曜日

CakePHPによる実践Webアプリケーション開発

ログアウトがうまくいかない

 毎度の事ながら、書籍の通りにコーディングしてもうまくいかない機能が発生する。

 CakePHP初心者の私には、解決するのに時間がかかって困る。 (>_<)
 しかし、結果的には「CakePHPの辞典」やら別の実習書籍やらネットでググったりして少しづつ理解を深めていっているようだが... (・ ・?)

今回のお題はこちら...

action == 'add' || $this->action == 'edit') {
            $this->AppAuth->authenticate = $this->User;
        }
        if($this->User->findCount() == 0) {
            $this->AppAuth->allow('add');
            if($this->action != 'add') {
                $this->redirect('add');
                exit;
            }
        }
        return parent::beforeFilter();
    }
    function login() {
    }
    function logout() {
        clearCache('element_'.$this->AppAuth->user('id').'_action_menu', 'views', '');
        $this->redirect($this->AppAuth->logout());
    }
}
?>
 上記だけの抜粋での説明には無理があるかと思いますが、default.ctp にてログアウトを行うリンクを貼り、上記のlogoutが実施されるという手はずになていますが、ログアウトが行われない。
 ここで言う「ログアウトの成功」は、現在表示されている画面から「ログイン画面」に切り替わることを言います。もちろんセッション情報が解除(削除されていることは言うまでもなく前提条件になります。

 なかなか解決できずに困りググっていたところ「CakePHPによる実践Webアプリケーション開発」のサポート」サイトでログイン関連のスレッドがあったのでその内容を参考にさせてもらったところログアウトが実現できるようになりました。その方法は、下記のように beforeFilter() の先頭に $this->AppAuth->logout(); を追記するという内容です。

変更後の内容は下記のとおりです。
AppAuth->logout();
        if($this->action == 'add' || $this->action == 'edit') {
            $this->AppAuth->authenticate = $this->User;
        }
        if($this->User->findCount() == 0) {
            $this->AppAuth->allow('add');
            if($this->action != 'add') {
                $this->redirect('add');
                exit;
            }
        }
        return parent::beforeFilter();
    }

  ‥‥‥ 省略 ‥‥‥

}
?>

 上記の設定でログアウトはできるようになったが、ログアウト以外を選択してもログアウトされてしまう... 解決になってない。orz

0 件のコメント:

コメントを投稿