2012-11-20 42 views
1

我們正在使用Symfony2框架構建應用程序。Symfony2和RememberMe令牌例外

有一個自定義身份驗證管理器可以正常工作,除非用戶連接並選擇'記住我'令牌。用戶登錄,可以導航拋出網站,片刻,這是在一個範圍內隨機從約5分鐘至1小時左右(也許更多)後,會出現以下異常:

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

唯一解決此問題的方法(並再次訪問網站)是從瀏覽器中刪除rememberme標記。

我對這個問題已經找不到任何建議,所以我想我可能會問這裏,以防有人遇到問題。

在此先感謝。

回答

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

希望它有點幫助:)