Symfony2和RememberMe令牌异常

时间:2012-11-20 15:34:55

标签: symfony remember-me

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

有一个自定义身份验证管理器可以正常工作,除非用户连接并选择“记住我”令牌。用户登录后,可以导航抛出网站,片刻之后,在约5分钟到约1小时(可能更多)的范围内随机出现以下异常:

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

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

我无法找到任何有关此问题的建议,所以我想我可能会问这里,以防有人遇到过这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的用户提供商应返回\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

希望它有所帮助:)