CakePHP Auth登录重定向到错误的地方

时间:2011-07-19 14:59:07

标签: cakephp login

我的应用程序设置为始终重定向到登录屏幕。登录和注销重定向让我疯狂。

当我实际登录时,首先它将重定向到注销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,这样我就可以再次在登录表单上方显示“你已经注销”消息。这就是我需要做的所有事情。

2 个答案:

答案 0 :(得分:0)

我对Auth组件没有太多的经验,但我怀疑你让它变得比它应该更难。文档清楚地表明,默认情况下,Auth将阻止访问除 login()logout()之外的所有操作

我首先删除userModelloginAction声明(无论如何都要指定默认值)。此外,您可以删除login()中的所有代码(保留空函数)。您可以在视图中显示来自Auth组件的任何错误消息 - 包括在login.ctp中:

echo $this->Session->flash('auth');

请注意,Auth组件将生成类似于代码中的消息。让它做它的事情可能更容易,并且只在你真正需要的地方覆盖那个行为。

我还会(暂时)删除loginRedirectlogoutRedirect声明,看看事情是否符合预期。 (默认情况下,登录将重定向回您尝试访问的任何页面,然后登录。注销将重定向到登录页面,并显示一条闪烁消息,表明您已注销。)如果您需要更改默认行为,一次添加一个并测试。

基本上,由于你正在使用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:

public function login() {
     if ($this->Auth->user()){
        $this->redirect($this->Auth->redirect());
    }
}
public function logout() {
   $this->redirect($this->Auth->logout());
}
在login.ctp中

,刷新身份验证消息:echo $session->flash('auth');

基本上,Cake会自动执行你想要的大部分内容,所以尽量不要写太多代码:))