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这是有意义的,但是因为这是一个安全系统,最好尽可能少地透露系统内部状态的信息。如果我们遵循您的建议,非用户可以根据网站返回的反馈调查激活的帐户。