调试日志出现问题 - 如果发生错误错误日志没有显示哪个用户导致错误,但是将用户名设置为空白 - security.DEBUG: Username "" was reloaded from user provider. [] []
我使用根据cookbook tutorial编写的自定义实体提供程序。其他消息 - 例如security.INFO: User "......" has been authenticated successfully
正确显示。
注意:我也将此问题发布到forum。
答案 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会否决它!