2013-04-03 10 views
5

CakePHPを使い始めていて、認証コンポーネントの設定に問題があります。 ユーザーがログアウトするたびに、ケーキはそれらをログインにリダイレクトします。 ログアウト中に一部のCookieを削除/設定しようとしています。これは、Wordpressサイトでシングルサインオンを設定しているためです。そのため、ユーザーは両方のサイトからログアウトする必要があります。ログアウト後にCakePHP認証コンポーネントがログインにリダイレクトされる

私のAppController:

class AppController extends Controller {  

public $components = array(
    'Session', 
    'Cookie', 
    'Auth'  => array(
     'loginRedirect'  => array('controller' => 'questions', 'action' => 'index'), 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')    
    ) 
); 
public function beforeFilter() { 
    $this->Auth->allow('index', 'view', 'login', 'logout', 'display'); 
} 
} 

がUserController:

class UsersController extends AppController { 

public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('add', 'logout', 'login'); 
} 

...

public function login() { 
//who cares 
} 

public function logout() { 

    $wp_cookie = grab_wp_cookie(); //this grabs a specific cookie 
    $cookie_name = (isset($wp_cookie['name'])) ? $wp_cookie['name'] : NULL; 
     //NONE OF THESE WORK... 
    $this->Cookie->write($cookie_name, '', false, time()-3600); 
    $this->Cookie->delete($cookie_name); 
    $this->Cookie->destroy(); 

    $this->redirect($this->Auth->logout()); 
} 
+0

ログアウト時に別のページにリダイレクトしたいですか? – summea

+0

理想的にはログアウト後にリダイレクトしますが、気にしません。今は、私のログイン操作を引き起こし、その結果、ユーザーはリダイレクト後もログインしたままになります。ログインアクションがログアウトプロセス(example.com/users/logout/)に関与する必要がある理由を私に完全に混乱させます – emersonthis

+0

'logout()'関数で次の行を使ってみましたか?前回私がテストプロジェクトに取り組んでいた時、私はこの行だけを使っていました: '$ this-> redirect($ this-> Auth-> logout());'特に上記のクッキー関連の行が必要な場合を除きます。 – summea

答えて

1

あなたがログに記録されずにページへのアクセス権を持っていないようです。

public function beforeFilter(){ 
    parent::beforeFilter(); 

    $this->Auth->allow(); 
} 
+0

ありがとうございます。 PagesControllerのbeforeFilterに何を渡す必要がありますか?また、ログに記録されていないユーザーがホームページにアクセスすることは混乱しますか?ログアウトがリダイレクトされる場所はどこですか? – emersonthis

0

をPagesControllerはのAppControllerののbeforeFilterを取る:。解決策は、あなたをPagesControllerでこのbeforeFilter機能を追加することです

(あなたはそれをチェックするためにログに記録されることなく、URLにアクセスして、それを試すことができます)私ができることは次のとおりです:

/** 
* GET /users/logout 
*/ 
public function logout() { 
    $this->Auth->logout(); 
    $this->redirect(array('controller' => 'pages', 'action' => 'display', 'home')); 
} 

ログアウトにはビューがないため、ログオンを許可する必要はありません。以下のようになりますのbeforeFilterアプリコントローラ:

public function beforeFilter() { 
    $this->Auth->allow('index', 'view', 'display'); 
} 
0

使用してみてください:

でスニペットを発見
return $this->redirect($this->Auth->logout()); 

Simple Authentication and Authorization Component

そして&を "ログイン" を削除することを忘れないでください「ログアウト"beforeFilterから。

関連する問題