2013-04-03 103 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'); 
}