我们正在使用Symfony2框架构建应用程序。
有一个自定义身份验证管理器可以正常工作,除非用户连接并选择“记住我”令牌。用户登录后,可以导航抛出网站,片刻之后,在约5分钟到约1小时(可能更多)的范围内随机出现以下异常:
The UserProviderInterface implementation must return an instance of UserInterface, but returned "Symfony\Component\Security\Http\RememberMe\TokenBasedRememberMeServices".
此时“解决”此问题(并再次访问网站)的唯一解决方案是从浏览器中删除rememberme令牌。
我无法找到任何有关此问题的建议,所以我想我可能会问这里,以防有人遇到过这个问题。
提前致谢。
答案 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
希望它有所帮助:)