使用 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
请参阅此答案了解更多详情:
我正在使用带有 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
请参阅此答案了解更多详情: