【问题标题】:Symfony2 and RememberMe token exceptionSymfony2 和 RememberMe 令牌异常
【发布时间】:2012-11-20 15:34:55
【问题描述】:

我们正在使用 Symfony2 框架构建一个应用程序。

实现了一个自定义身份验证管理器,可以正常工作,除非用户连接并选择“记住我”令牌。用户登录后,可以导航扔网站,过了一会儿,随机的,从大约5分钟到大约1小时(可能更久),出现以下异常:

The UserProviderInterface implementation must return an instance of UserInterface, but returned "Symfony\Component\Security\Http\RememberMe\TokenBasedRememberMeServices".

此时“修复”此问题(并再次访问网站)的唯一解决方案是从浏览器中删除 rememberme 令牌。

我真的找不到任何关于这个问题的建议,所以我想我可以在这里问一下,以防有人遇到过这个问题。

提前致谢。

【问题讨论】:

    标签: symfony remember-me


    【解决方案1】:

    您的用户提供程序应返回\Symfony\Component\Security\Core\User\UserInterface 的实例或抛出\Symfony\Component\Security\Core\Exception\UsernameNotFoundException 以防找不到用户。没有别的了。

    在我的例子中是这样的:

    public function loadUserByUsername($loginOrEmail)
    {
        $qb = $this->dm
            ->getRepository('MyBundle:User')
            ->createQueryBuilder('u');
    
        $qb->where()->orX()
            ->eq()->localName('u')->literal($loginOrEmail)->end()
            ->eq()->field('u.email')->literal($loginOrEmail);
    
        $user = $qb->getQuery()->getOneOrNullResult();
    
        if (!$user) {
            throw new UsernameNotFoundException(sprintf('User "%s" not found.', $loginOrEmail));
        }
    
        return $user;
    }
    

    这种方法将解决所有问题。 仔细看\Symfony\Bridge\Doctrine\Security\User\EntityUserProvider

    希望对你有所帮助:)

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2017-05-27
      相关资源
      最近更新 更多