我的应用程序设置为始终重定向到登录屏幕。登录和注销重定向让我疯狂。
当我实际登录时,首先它将重定向到注销URL,然后如果我第二次登录它将正确地重定向到主页。然后,当我退出时,它会重定向到登录URL而不是注销URL。
在app_controller.php
中public function beforeFilter() {
$this->Auth->userModel = 'User';
$this->Auth->loginAction = '/users/login';
$this->Auth->loginRedirect = '/home';
$this->Auth->logoutRedirect = '/users/login/1';
$this->Auth->authError = 'You must be logged in to view this page.';
}
并在users_controller.php
中public function login($loggedout = false) {
if ($this->Session->check('Message.auth')) {
$this->Session->setFlash('Incorrect username or password.', 'default', array('class' => 'msg error'), 'auth');
} elseif ($loggedout) {
$this->Session->setFlash('You have been logged out.', 'default', array('class' => 'msg success'), 'auth');
}
}
/**
* Logout action
*/
public function logout() {
$this->redirect($this->Auth->logout());
}
我不知道出了什么问题。这似乎是一个非常简单的组件。顺便说一句,我是CakePHP的新手。
基本上,登录应该重定向到/ home,并且logout应该重定向到/ users / login / 1,这样我就可以再次在登录表单上方显示“你已经注销”消息。这就是我需要做的所有事情。
答案 0 :(得分:0)
我对Auth组件没有太多的经验,但我怀疑你让它变得比它应该更难。文档清楚地表明,默认情况下,Auth将阻止访问除 login()
和logout()
之外的所有操作。
我首先删除userModel
和loginAction
声明(无论如何都要指定默认值)。此外,您可以删除login()
中的所有代码(保留空函数)。您可以在视图中显示来自Auth组件的任何错误消息 - 包括在login.ctp中:
echo $this->Session->flash('auth');
请注意,Auth组件将生成类似于代码中的消息。让它做它的事情可能更容易,并且只在你真正需要的地方覆盖那个行为。
我还会(暂时)删除loginRedirect
和logoutRedirect
声明,看看事情是否符合预期。 (默认情况下,登录将重定向回您尝试访问的任何页面,然后登录。注销将重定向到登录页面,并显示一条闪烁消息,表明您已注销。)如果您需要更改默认行为,一次添加一个并测试。
基本上,由于你正在使用Cake默认的用户模型,你几乎不需要任何配置 - 这是CakePHP的好处之一。
答案 1 :(得分:0)
这是我的建议:
for app_controller
public function beforeFilter() { $this->Auth->loginRedirect = '/home'; $this->Auth->authError = 'You must be logged in to view this page.'; }
for users_controller:
在login.ctp中public function login() { if ($this->Auth->user()){ $this->redirect($this->Auth->redirect()); } } public function logout() { $this->redirect($this->Auth->logout()); }
,刷新身份验证消息:echo $session->flash('auth');
基本上,Cake会自动执行你想要的大部分内容,所以尽量不要写太多代码:))