Symfony2调试日志不显示用户名

时间:2012-02-14 12:21:52

标签: symfony error-logging

调试日志出现问题 - 如果发生错误错误日志没有显示哪个用户导致错误,但是将用户名设置为空白 - security.DEBUG: Username "" was reloaded from user provider. [] []

我使用根据cookbook tutorial编写的自定义实体提供程序。其他消息 - 例如security.INFO: User "......" has been authenticated successfully正确显示。

注意:我也将此问题发布到forum

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,我花了很多时间来解决这个问题。

问题是您没有在User对象的serialize函数中序列化用户名。

许多人将以下内容用于序列化功能:

public function serialize()
{
    return serialize($this->id);
}

public function unserialize($data)
{
    $this->id= unserialize($data);
}

这种方式只有在从会话令牌加载用户时才知道id(注意这也会破坏?_switch_user = _exit功能)。

要解决此问题,您应该使用以下代码:

public function serialize()
{
    return serialize(array($this->id,$this->username));
}

public function unserialize($data)
{
    list($this->id,$this->username) = unserialize($data);
}

这样,用户名和ID就可用了,问题就解决了。

注意:不会使用自定义用户提供程序的“refreshUser”功能,因为EntityUserProvider会否决它!