我的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代码。
还有其他代码吗?我在哪里可以找到它们?
此外,无论密码是否错误或用户不存在,似乎都会发生此异常。有没有办法区分这两个事件?
答案 0 :(得分:2)
我不知道与Exception
组件中的Symfony/Security
相关联的代码。请注意,这不是(但是?)在异常中设置代码的常见做法。您更愿意在Exception
语句中使用TypeHinting
检查catch(Exception $e)
的类型。或者使用instanceof
运算符。
如果凭据无效且未找到用户,则抛出BadCredentialsException
。但是,您可以重新配置UserAuthenticationProvider
以隐藏"隐藏"它
检查UserAuthenticationProvider.php
,构造函数中有一个选项。
您可以在security.yml
:
security:
hide_user_not_found: false
根据您的使用案例,您可能还想编写自己的AuthenticationProviderInterface
实现。