我开始使用CakePHP,我在设置Auth组件时遇到了问题。 每次用户退出时,蛋糕会将其重定向回登录。 您将看到我在logout()期间尝试删除/取消设置某些cookie。这是因为我正在使用Wordpress网站设置单点登录,因此我希望用户从两个站点注销。
我的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 :(得分:1)
您似乎没有登录就无法访问该页面。 (您可以尝试访问该URL而不进行记录只是为了检查它)
解决方案是在PagesController中添加此beforeFilter
函数:
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow();
}
答案 1 :(得分: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');
}
答案 2 :(得分:0)
尝试使用:
return $this->redirect($this->Auth->logout());
找到以下代码段: Simple Authentication and Authorization Component
不要忘记删除“登录”&来自beforeFilter的“logOut”。