synfony fosuser catch AccountExpiredException

时间:2015-12-21 16:47:42

标签: symfony fosuserbundle

我想在用户登录时使用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的好方法。

1 个答案:

答案 0 :(得分:0)

您可能希望扩展AuthenticationFailureHandler。 请参阅(仅作为一个参考)此处接受的答案:Overriding the authentication failure handler - Symfony2

由于您没有提供任何其他信息:根据您使用的Symfony版本,您可能希望查看Symfony上的新Guard身份验证。