【问题标题】:Symfony2 debug log doesn't show usernameSymfony2 调试日志不显示用户名
【发布时间】:2012-02-14 12:21:52
【问题描述】:
我的调试日志有问题 - 如果发生错误,错误日志不会显示哪个用户导致错误,但将用户名设置为空白 - security.DEBUG: Username "" was reloaded from user provider. [] []
我使用根据cookbook tutorial 编写的自定义实体提供程序。其他消息 - 例如security.INFO: User "......" has been authenticated successfully 正确显示。
注意:我也将此问题发布到forum。
【问题讨论】:
标签:
symfony
error-logging
【解决方案1】:
我遇到了同样的问题,我花了很多时间才弄清楚这一点。
问题是你没有在User对象的序列化函数中序列化用户名。
许多人将以下内容用于他们的序列化功能:
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 可用并且问题得到解决。
注意:您的自定义用户提供程序的“刷新用户”功能将永远不会被使用,因为它将被 EntityUserProvider 否决!