我想让Auth
访问我的用户控制器的login()
、logout()
和add()
操作,但不管我是否使用 $this->Auth->allow('logout');
我都会收到消息:You are not authorized to access that location.
login()
和add()
工作正常。
这是我的AppContoller.php:
class AppController extends Controller {
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'userModel' => 'User',
'fields' => array(
'username' => 'email', 'password' => 'password')
)
),
'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'landing')
), 'Session'
);
public function beforeFilter() {
$this->Auth->allow('add', 'login');
}
}
这是我的用户控制器的相关部分.php:
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('logout');
}
public function logout() {
$this->set('title_for_layout', 'Logout');
$this->redirect($this->Auth->logout());
}
有人看到这里的问题吗?我感谢您的帮助。
您似乎正在毫无问题地访问注销操作,但注销重定向会破坏您的会话并将您重定向到page
视图。
似乎您在不登录的情况下无法访问该页面。(您可以尝试在不被记录的情况下访问 URL)
在您的PagesController
添加beforeFilter
函数:
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow();
}
PagesController 默认随 CakePHP 2.2 一起提供,如果您没有它,只需复制并粘贴任何其他控制器并添加此功能即可删除所有其他控制器。
编辑:如果 PagesController 已经存在,只需添加 beforeFilter 函数即可。