2013-04-03 78 views
5

我開始使用CakePHP,並且在設置驗證組件時遇到問題。 每次用戶註銷時,cake都會重定向到登錄。 您將看到我正在嘗試在註銷()期間刪除/取消設置一些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'); 
} 
} 

UsersController:

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 2013-04-03 22:07:06

+0

理想情況下,我會在註銷後重定向,但我並不在乎。現在,它會觸發我的登錄操作,導致用戶在重定向後仍保持登錄狀態。這完全令我困惑,爲什麼登錄操作應該在註銷過程中有任何參與(example.com/users/logout/) – emersonthis 2013-04-03 22:08:23

+0

您是否嘗試過在'logout()'函數中使用以下行?上次我正在開發一個測試項目......我只使用這一行:'$ this-> redirect($ this-> Auth-> logout());'除非你特別需要上面那些與cookie相關的行.. – summea 2013-04-03 22:17:06

回答

1

看來你沒有訪問的頁面不被記錄。 (你可以嘗試訪問URL沒有被記錄只是爲了檢查)

的解決方法是在你的PagesController添加此beforeFilter功能:

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

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

謝謝。我應該將什麼傳遞給PagesController中的beforeFilter?另外,一個沒有登錄的用戶可以訪問主頁,這是註銷重定向到的地方嗎? – emersonthis 2013-04-04 12:42:19

0

的PagesController將採取的AppController的beforeFilter。我可能做的是這樣的:

/** 
* 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'); 
}