Symfony2.1和AdvancedUserInterface:自定义UserChecker的登录错误消息

时间:2012-09-16 16:22:11

标签: exception authentication symfony login symfony-2.1

如何使用用户类在 Symfony2.1 应用中自定义 UserChecker 类提供的错误消息实现 AdvancedUserInterface

例如,当用户未启用或其帐户已被锁定时,会提供这些消息!

2 个答案:

答案 0 :(得分:5)

即使在Symfony 2.0中也可以轻松完成。

无需重新实现UserCheckerInterface

按照此处所述实施登录表单:Using a Traditional Login Form

$error实际上是AuthenticationException的实例。

如果您在模板中显示如下:

{% if error %}{{ error.message|trans }}{% endif %}

...然后您可以使用翻译组件自定义消息,例如。在 messages.en.yml

'User account is locked.': 'Your account has been locked by administrator.'
'The presented password is invalid.': 'Invalid password.'
'Bad credentials': 'Invalid username.'

如果你这样做,你可以免费获得翻译:)

BTW我读过一个案例研究,建议向用户说明登录确实出错的地方(传递?用户名?)超过了安全问题(在用户体验方面)并大大改善了转换(返回用户)

答案 1 :(得分:0)

Symfony 2.1中没有此功能。它计划作为Symfony 2.2的一部分发布。

有关详细信息,请参阅此discussion


更新以回应@JeanValjean

您可以实施Symfony\Component\Security\Core\User\UserCheckerInterface

然后使用以下配置键将用户检查器设置为您的班级。

security.user_checker.class = My\User\Checker\Class.