我有自定义UserProvider
,在refreshUser
方法中,我返回字符串anon.
以将用户注销。但是这样做会引发异常Error: Call to a member function getUsername() on a non-object
,因为在第164行的ContextListener.php中,它正在访问字符串上的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;
}
是否有其他方法可以将用户注销?我该怎么做才能防止抛出此异常?
答案 0 :(得分:2)
你根本不应该返回一个字符串。此方法应仅返回UserInterface
的实例或抛出异常。
如果您的提供商中没有此类用户,则应抛出UsernameNotFoundException
。
查看Symfony文档中的示例:How to Create a custom User Provider