2017-05-29 47 views
0

我有一个自定义UserProviderrefreshUser方法,我返回字符串anon.登录用户。但是这样做会抛出异常Error: Call to a member function getUsername() on a non-object,因为在ContextListener.php位于第164行,它正在访问字符串上的getusername错误:调用一个非对象的成员函数getUsername()

public function refreshUser(UserInterface $user) 
{ 
    if (!$user instanceof User) { 
     throw new UnsupportedUserException(sprintf(
      'Instances of "%s" are not supported.', 
      get_class($user) 
     )); 
    } 

    if ($this->request && !$this->request->cookies->has('lsm_token')) 
    { 
     $this->tokenStorage->setToken(null); 
     $this->request->getSession()->invalidate(); 
     return 'anon.'; 
    } 

    return $user; 
} 

是否有替代方案可以将用户注销?我能做些什么来防止这个异常被抛出?

回答

2

你根本不应该返回一个字符串。此方法应只返回UserInterface的实例或抛出异常。

如果你的提供者没有这样的用户,那么你应该抛出UsernameNotFoundException

看看Symfony文档中的示例:How to Create a custom User Provider

相关问题