2011-07-19 10 views
0

私のアプリケーションは常にログイン画面にリダイレクトされるように設定されています。しかし、ログインとログアウトのリダイレクトは私を苦労させている。CakePHP認証ログインが間違った場所にリダイレクトされる

実際にログインすると、まずログアウトURLにリダイレクトされます.2回目にログインすると、正しくホームページにリダイレクトされます。その後、ログアウトすると、ログインURLにリダイレクトされ、ログアウトURLにはリダイレクトされません。

app_controller.phpでは

public function beforeFilter() { 
    $this->Auth->userModel = 'User'; 
    $this->Auth->loginAction = '/users/login'; 
    $this->Auth->loginRedirect = '/home'; 
    $this->Auth->logoutRedirect = '/users/login/1'; 
    $this->Auth->authError = 'You must be logged in to view this page.'; 
} 

そしてusers_controller.phpで

public function login($loggedout = false) { 
    if ($this->Session->check('Message.auth')) { 
     $this->Session->setFlash('Incorrect username or password.', 'default', array('class' => 'msg error'), 'auth'); 
    } elseif ($loggedout) { 
     $this->Session->setFlash('You have been logged out.', 'default', array('class' => 'msg success'), 'auth'); 
    } 
} 

/** 
* Logout action 
*/ 
public function logout() { 
    $this->redirect($this->Auth->logout()); 
} 

私が間違って何が起こっているか見当がつかない。これはかなりシンプルなコンポーネントのように思えます。私は途中でCakePHPの初心者です。

基本的には、ログインが家/にリダイレクトする必要があり、およびログアウト/ユーザー/にリダイレクト/ 1ので、私は再びログインフォーム上の「ログアウトされました」というメッセージを表示することができますログインする必要があります。それは文字通り私がする必要があるすべてです。

+0

OK、私はこれを考え出しました。基本的にこれは、CakePHP Authが苦しんでいるような一種のログインリダイレクトループと関係しています。基本的には、自分のログインページがAuth-> allowリストに手動で追加されていることを確認してから、Auth.redirectセッション変数がループバックしていないかどうかを確認するカスタムコードを追加する必要がありました。 – BadHorsie

+0

ログインは自動的に許可リストに含まれます。 –

+0

はい、許可リストにログインを手動で指定していない場合、/ users/login/out:1にログアウトすると、ログアウトしたメッセージを表示できるので、/ users/loginに再度リダイレクトされます決して表示されません。 – BadHorsie

答えて

0

私はAuthコンポーネントで豊富な経験はありませんが、私はあなたがこれよりも少し難しいと思っています。デフォルトでは、Authはすべてlogin()logout()を除く)のアクセスをブロックすることが明らかです。

まず、userModelloginAction宣言を削除することから始めます(とにかくデフォルトを指定しています)。また、login()のコードをすべて削除することもできます(空のままにしておきます)。あなたのビュー—で認証成分を返すから任意のエラーメッセージを表示することができ、あなたのlogin.ctpでこれを含める:Authコンポーネントは、あなたのコードを持っているもののようなメッセージが生成されます

echo $this->Session->flash('auth'); 

注こと。おそらくそれがそのことをさせ、本当に必要なところでその振る舞いを上書きするだけで簡単になるでしょう。

また、(一時的に)loginRedirectlogoutRedirect宣言を削除して、物事が期待どおりに動作するかどうかを確認します。 (デフォルトでは、ログインが戻ってあなたがログインする前にアクセスしようとしていたものは何でもページにリダイレクトします。ログアウトあなたがログアウトしてきた示すフラッシュメッセージで、ログインページにリダイレクトされます。)デフォルトの動作を変更する必要がある場合一度に1つずつ追加してテストします。

基本的には、Cakeがデフォルトで期待しているUserモデルを使用しているので、CakePHPに関する素晴らしいことの一つである—の設定はほとんど必要ありません。

0

は、ここに私の提案です:users_controllerためapp_controller

public function beforeFilter() { 
    $this->Auth->loginRedirect = '/home'; 
    $this->Auth->authError = 'You must be logged in to view this page.'; 
} 

ため

:ログインで

public function login() { 
    if ($this->Auth->user()){ 
     $this->redirect($this->Auth->redirect()); 
    } 
} 
public function logout() { 
    $this->redirect($this->Auth->logout()); 
} 

。CTP、フラッシュアウトAUTHメッセージ:echo $session->flash('auth');

を基本的には、ケーキは自動的にあなたがすでに何をしたいの大半を行うので、あまりにも多くのコードを:)記述しないようにしようとします)

関連する問題