管理Symfony BadCredentialsException代码

时间:2016-12-23 15:33:37

标签: symfony

我的symfony项目中有一个登录表单(我是symfony中的一个品牌菜鸟),我希望根据我得到的错误做出不同的反应。

我阅读了BadCredentialsException及其父类AuthenticationException的文档,但没有找到任何关于错误代码的内容,每当我使用Twig转储getLastAuthenticationError()时我都会得到错误代码:

BadCredentialsException {#93 ▼
  -token: UsernamePasswordToken {#92 ▶}
  #message: "Bad credentials."
  #code: 0
  #file: "C:\pathToProject\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php ◀"
  #line: 90
  -trace: {▶}
}

到目前为止,我总是有0代码。

还有其他代码吗?我在哪里可以找到它们?

此外,无论密码是否错误或用户不存在,似乎都会发生此异常。有没有办法区分这两个事件?

1 个答案:

答案 0 :(得分:2)

我不知道与Exception组件中的Symfony/Security相关联的代码。请注意,这不是(但是?)在异常中设置代码的常见做法。您更愿意在Exception语句中使用TypeHinting检查catch(Exception $e)的类型。或者使用instanceof运算符。

如果凭据无效且未找到用户,则抛出BadCredentialsException。但是,您可以重新配置UserAuthenticationProvider以隐藏"隐藏"它

检查UserAuthenticationProvider.php,构造函数中有一个选项。

您可以在security.yml

中进行设置
security:
   hide_user_not_found: false

根据您的使用案例,您可能还想编写自己的AuthenticationProviderInterface实现。