Cakephp验证:将错误消息绑定到范围条件

Cakephp验证:将错误消息绑定到范围条件,cakephp,authentication,cakephp-2.1,Cakephp,Authentication,Cakephp 2.1,有没有办法将身份验证错误消息绑定到身份验证组件的作用域条件 例如,我有: 'Auth' => array('authenticate' => array('Blowfish' => array('scope' => array('User.activated' => 1)))); 如果作用域条件失败,我想设置一个错误。我需要能够将其与用户/通行证不正确时出现的错误区分开来 这是可能的吗?对,我对CakePHP的源代码有了深入的了解,我得出的结论是,它在使用作用域条

有没有办法将身份验证错误消息绑定到身份验证组件的作用域条件

例如,我有:

'Auth' => array('authenticate' => array('Blowfish' => array('scope' => array('User.activated' => 1))));
如果作用域条件失败,我想设置一个错误。我需要能够将其与用户/通行证不正确时出现的错误区分开来


这是可能的吗?

对,我对CakePHP的源代码有了深入的了解,我得出的结论是,它在使用作用域条件时不会做任何花哨的事情,它只是将它们作为附加查询条件附加。它将查找与用户名/密码组合和任何作用域条件匹配的用户,或者不匹配

一种可能的解决方案是手动登录用户并检查激活字段,如下所示:

public function login()
{
    if ($this->request->is('post')) {
        if ($this->Auth->login($this->data['User'])) {
            // check activated field
            if ($this->Auth->user('activated') == 1) {
                // user is activated
                $this->redirect(...);
            } else {
                // user is not activated
                // log the user out
                $this->Auth->logout();
                // redirect to an error page for inactive users
                $this->redirect(..);
            }
        }
        // redirect to an error page for wrong username/password
        $this->redirect(..);
    }
}
我应该澄清一下,在配置身份验证组件时不应该指定作用域条件


我希望这有帮助

是的,我对CakePHP的源代码有了深入的了解,我得出结论,当使用作用域条件时,它不会做任何花哨的事情,它只是将它们作为附加查询条件进行附加。它将查找与用户名/密码组合和任何作用域条件匹配的用户,或者不匹配

一种可能的解决方案是手动登录用户并检查激活字段,如下所示:

public function login()
{
    if ($this->request->is('post')) {
        if ($this->Auth->login($this->data['User'])) {
            // check activated field
            if ($this->Auth->user('activated') == 1) {
                // user is activated
                $this->redirect(...);
            } else {
                // user is not activated
                // log the user out
                $this->Auth->logout();
                // redirect to an error page for inactive users
                $this->redirect(..);
            }
        }
        // redirect to an error page for wrong username/password
        $this->redirect(..);
    }
}
我应该澄清一下,在配置身份验证组件时不应该指定作用域条件


我希望这有帮助

您是否尝试过使用
$this->Auth->login($this->request->data['User'])手动登录用户时会发生什么情况。在呈现视图之前,您可能会截获一个返回对象或异常。不幸的是,该方法返回一个布尔值。您是否尝试过查看当您使用
$this->Auth->login($this->request->data['User'])手动登录用户时会发生什么情况。在呈现视图之前,您可能会截获一个返回对象或异常。不幸的是,该方法返回一个布尔值。这就是我在查看源代码时的想法。我不确定是否有其他方法可以做到这一点。我认为允许这样的约束是值得的。感谢您的回复:)欢迎@BIOS。我在这里绝对支持您的用例,因为我觉得您正在丢失有关身份验证过程的信息,这可能会影响应用程序的响应方式。实现这样一个函数的困难在于支持向后兼容性,以及CakePHP所具有的整个配置惯例。如果你觉得你有一个足够强大的案例,那么我建议你在他们的网站上发布或自己实现它,并在他们的网站上提出请求。我认为,如果你必须避免在一个有效的用例中使用“条件”功能,那么这个功能显然被破坏了。如果login方法返回一个包含所有身份验证失败的对象,而不仅仅是false,那就更好了。向后兼容性当然是个问题。会考虑一张票。再次感谢。在调用Auth登录组件之前检查特殊参数不是更好吗?例如:
如果($this->User->customCheck()){$this->Auth->login();}除了登录他们之外,还有其他的东西。{uu}
@JadedCore这是有意义的,但是因为这是一个安全系统,最好尽可能少地透露系统内部状态的信息。如果我们遵循你的建议,非用户可以根据网站返回的反馈调查激活的帐户。这就是我在查看来源时的想法。我不确定是否有其他方法可以做到这一点。我认为允许这样的约束是值得的。感谢您的回复:)欢迎@BIOS。我在这里绝对支持您的用例,因为我觉得您正在丢失有关身份验证过程的信息,这可能会影响应用程序的响应方式。实现这样一个函数的困难在于支持向后兼容性,以及CakePHP所具有的整个配置惯例。如果你觉得你有一个足够强大的案例,那么我建议你在他们的网站上发布或自己实现它,并在他们的网站上提出请求。我认为,如果你必须避免在一个有效的用例中使用“条件”功能,那么这个功能显然被破坏了。如果login方法返回一个包含所有身份验证失败的对象,而不仅仅是false,那就更好了。向后兼容性当然是个问题。会考虑一张票。再次感谢。在调用Auth登录组件之前检查特殊参数不是更好吗?例如:
如果($this->User->customCheck()){$this->Auth->login();}除了登录他们之外,还有其他的东西。{uu}
@JadedCore这是有意义的,但是因为这是一个安全系统,最好尽可能少地透露系统内部状态的信息。如果我们遵循您的建议,非用户可以根据网站返回的反馈调查激活的帐户。