6

我有用户类作为基类,然后我从用户类扩展了教师。

当我尝试登录时出现此错误

您不能从不包含标识符的 EntityUserProvider 刷新用户。用户对象必须使用由 Doctrine 映射的自己的标识符进行序列化。

我在 user.php 中有序列化/反序列化功能,因为我已经从 FOSUserbundle 解决了这个问题

public function serialize()
    {
        return serialize(array(
            $this->password,
            $this->salt,
            $this->usernameCanonical,
            $this->username,
            $this->expired,
            $this->locked,
            $this->credentialsExpired,
            $this->enabled,
        ));
    }

我无法找到可以检查错误的地方。我被困住了。请帮忙

4

4 回答 4

9
"You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine."

这不是问题的答案,但如果有人用谷歌搜索上面的错误消息(就像我一样),这是最热门的。自从我找到了我的解决方案,我想我会分享。

如果您从数据库中删除当前用户,然后尝试重定向用户,您将收到此错误。(这似乎是一个愚蠢的错误,但错误消息肯定没有帮助!)解决方案是在重定向之前简单地清除会话。

$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
于 2012-11-28T12:22:05.773 回答
5

代码EntityUserProvider.php看来,您还必须对用户进行序列化id

于 2012-07-20T04:49:08.497 回答
1

刚刚使用类表继承遇到了同样的问题,这是由id属性设置为的可见性引起的private,所以子类无法访问id,改变它来protected解决它。

于 2017-10-08T00:58:22.877 回答
0

User 对象在某些时候被克隆,所以一定要这样做(就像我做的那样):

function __clone()
{
    $this->id = null;
}
于 2019-03-12T11:54:00.063 回答