错误:在非对象上调用成员函数getUsername()

时间:2017-05-29 08:34:22

标签: symfony

我有自定义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;
}

是否有其他方法可以将用户注销?我该怎么做才能防止抛出此异常?

1 个答案:

答案 0 :(得分:2)

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

如果您的提供商中没有此类用户,则应抛出UsernameNotFoundException

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