使用 symfony 和 FOSUserBundle 在登录失败时覆盖 BadCredentialsException

Override BadCredentialsException on login fail with symfony and FOSUserBundle

我正在使用带有 FriendsOfSymfony/FOSUserBundle 2.12 版本的 Symfony 2.8。

我期待特定的登录错误消息 比如如果我输入了错误的用户名然后我应该收到错误消息 "username not found" 如果我输入了错误的密码那么我应该得到类似这样的错误消息 "password is not valid"。

但是,在上述情况下,我收到了相同的错误消息 "Bad credentials"。

进一步研究后,我发现 Symfony 在 UserAuthenticationProvider.php 文件中的 authenticate 方法中隐藏了 UsernameNotFoundException:

    try {
        $user = $this->retrieveUser($username, $token);
    } catch (UsernameNotFoundException $e) {
        if ($this->hideUserNotFoundExceptions) {
            throw new BadCredentialsException('Bad credentials.', 0, $e);
        }
        $e->setUsername($username);

        throw $e;
    }

我在登录表单中转储错误对象。这是屏幕截图::

任何人都知道如何获得特定的错误消息。提前致谢。

您可以在 security.yml:

中进行设置
security:
   hide_user_not_found: false

请参阅此答案了解更多详情: