我想在用户登录时使用fosUser捕获AccountExpiredException。实际上,如果用户有一个过期的帐户,他将重定向到登录表单。我想改变它并给他连接的可能性。我有一个登录管理器,我不知道在哪里可以捕获AccountExpiredException并更改操作。
编辑:
我已经找到了我可以更改此操作的位置,它位于UserChecker类(安全/核心/用户)中,但我不想直接在此类中编写。我找不到覆盖UserChecker和更改checkPreAuth的方法。一些帮助非常欣赏,我迷路了。
编辑:
我使用symfony 2.7,我找到的唯一方法(丑陋的方式)是commente $ user-> isAccountNonExpired(),如下所示:
class UserChecker implements UserCheckerInterface
{
public function checkPreAuth(UserInterface $user)
{
if (!$user instanceof AdvancedUserInterface) {
return;
}
if (!$user->isAccountNonLocked()) {
$ex = new LockedException('User account is locked.');
$ex->setUser($user);
throw $ex;
}
if (!$user->isEnabled()) {
$ex = new DisabledException('User account is disabled.');
$ex->setUser($user);
throw $ex;
}
if (!$user->isAccountNonExpired()) {
/*$ex = new AccountExpiredException('User account has expired.');
$ex->setUser($user);
throw $ex;*/
}
}
我找不到覆盖checkPreAuth的好方法。
答案 0 :(得分:0)
您可能希望扩展AuthenticationFailureHandler。 请参阅(仅作为一个参考)此处接受的答案:Overriding the authentication failure handler - Symfony2
由于您没有提供任何其他信息:根据您使用的Symfony版本,您可能希望查看Symfony上的新Guard身份验证。