【问题标题】:Cakephp auth: Binding error messages to scope conditionCakephp auth:将错误消息绑定到范围条件
【发布时间】:2013-05-07 17:38:13
【问题描述】:

有没有办法将 auth 错误消息绑定到 auth 组件的范围条件?

例如说我有:

'Auth' => array('authenticate' => array('Blowfish' => array('scope' => array('User.activated' => 1))));

如果范围条件失败,我想设置一个错误。如果用户/密码不正确,我需要能够将其与显示的错误区分开来。

这可能吗?

【问题讨论】:

  • 您是否尝试查看使用$this->Auth->login($this->request->data['User']); 手动登录用户时会发生什么。在呈现视图之前,您可能可以拦截返回对象或异常。
  • 不幸的是,该方法返回一个布尔值。

标签: cakephp authentication cakephp-2.1


【解决方案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(..);
    }
}

我应该澄清一下,您不应在配置身份验证组件时指定范围条件。

我希望这会有所帮助!

【讨论】:

  • 看源码的时候也是这么想的。不确定是否有其他方法可以做到这一点。我认为允许这样的绑定将是一个值得添加的蛋糕。感谢您的回复:)
  • 欢迎您@BIOS。我在这里绝对支持您的用例,因为我觉得您丢失了有关可能影响您的应用程序响应方式的身份验证过程的信息。实现这样一个功能的困难在于支持向后兼容性以及 CakePHP 所具有的整个 convention over configuration 精神。如果您觉得自己的案例足够强大,那么我建议您在他们的issue tracker 上发布或自己实施它并在他们的repo 上提出拉取请求
  • 我认为,如果您必须避免在有效用例中使用“条件”功能,那么该功能显然会被破坏。如果 login 方法返回一个包含所有身份验证失败的对象,而不仅仅是 false,那就更好了。向后兼容性当然是一个问题。会考虑买票。再次感谢。
  • 在调用Auth登录组件之前检查特殊参数不是更好吗?例如:if($this->User->customCheck()){$this->Auth->login();} else{ _Something other than logging them in._ }
  • @JadedCore 肯定是有道理的,但是因为这是一个安全系统,所以最好尽可能少地透露有关系统内部状态的信息。如果我们遵循您的建议,非用户可以根据网站返回的反馈来探查激活的帐户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多