1

我正在尝试实现一个额外的身份验证层,目的是仅在用户具有特定状态时对其进行身份验证。如果状态不同,我想显示自定义登录错误(您的帐户已被暂停)并且根本不对用户进行身份验证,类似于凭据错误时会发生的情况,但会显示不同的错误消息。

到目前为止,我尝试了两种选择:

  1. 我在侦听器中添加了一个检查“InteractiveLoginEvent”。在这里,我可以检查用户状态并设置一个 flash 错误消息,但我看不到重定向回登录页面的正确方法是什么,因为这个事件没有响应方法,除了使用我肯定的 header() 调用想避免。

  2. 我实现了一个自定义投票器,将“access_decision_manager”启动设置为“一致”,如果状态不允许用户进行身份验证,则返回“ACCESS_DENIED”。到目前为止一切顺利,用户无法访问资源,但我看到他仍然获得了身份验证。我绝对不希望那样。

我不确定我是否遗漏了什么,或者我是否走错了方向。

4

1 回答 1

0

由于 symfony 2 明确区分了身份验证和授权,似乎选项 2) 与授权有关,因此选项 1) 更合适。

因此,在“InteractiveLoginEvent”侦听器中,我刚刚添加了对用户状态的正确检查,并通过抛出以下异常,我设法根据需要实现了我的功能:

throw new AuthenticationException('挂起错误信息');

所以监听器看起来像这样:

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{        
    if ($this->securityContext->isGranted('ROLE_CUSTOMROLE')) {
        $user = $this->securityContext->getToken()->getUser();
        // ... check for the user status here

        throw new AuthenticationException('Your account has been suspended!');
    }
}
于 2013-09-24T12:59:23.383 回答