CakePHP:在主页上阻止Auth组件的“authError”消息

时间:2011-09-15 01:37:37

标签: cakephp

我有一个CakePHP项目,我在其中修改了“app / config / routes.php”,以便根指向“用户”控制器的“仪表板”操作。换句话说,这两个网址会转到同一个地方:

http://example.com/

http://example.com/users/dashboard

我在“App”控制器中设置了“Auth”组件,如下所示:

class AppController extends Controller {
    var $components = array('Auth', 'Session');

    function beforeFilter() {
        $this->Auth->authorize = 'controller';
        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');

        if ($this->Auth->user()) {
            $this->set('logged_in', true);
        }
        else {
            $this->set('logged_in', false);
        }
    }
}

我希望如此,如果未经过身份验证的用户直接进入http://example.com/users/dashboard,他们将被带到登录页面显示“Auth”组件的“authError”消息,但是如果他们转到http://example.com/,他们将被带到登录页面,而不会显示“Auth”组件的“authError”消息。这可能吗?

4 个答案:

答案 0 :(得分:1)

我通过将以下代码放入“用户”控制器的“登录”操作中解决了这个问题:

if ($this->Session->read('Auth.redirect') == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
    $this->Session->delete('Message.auth');
}

答案 1 :(得分:0)

好吧,我不明白为什么有时你会显示错误,为什么有时候不会......但是你可以负担得起这个创建一个isAuthorized方法并修改默认AuthComponent行为的所有逻辑。

打开Auth组件并检查方法“startup()”。在那里,在它的最后一行,你会看到这个:

$this->Session->setFlash($this->authError, $this->flashElement, array(), 'auth');
$controller->redirect($controller->referer(), null, true);

这是负责显示错误的部分。

在此之前,你将会......

if ($this->isAuthorized($type)) {
    return true;
}

因此,您可以更改isAuthorized方法以在需要时更改此消息。

很多工作(我认为......)没什么。

PS。可能有一种更简单的方法可以忽略我

答案 2 :(得分:0)

长期以来一直在寻找类似的东西!谢谢。

我必须做一点改动,然后$this->webroot不是“/”:

if (str_replace("//","/",$this->webroot.$this->Session->read('Auth.redirect')) == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
    $this->Session->delete('Message.auth');
}

答案 3 :(得分:0)

如果您真的想在主页上阻止authError消息并简单地重定向到登录页面,那么您必须将false作为authError的参数

class AppController extends Controller {

    public function initialize() {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authError' => false
        ]);
    }

}