【问题标题】: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 否决!

    【讨论】:

      猜你喜欢
      • 2022-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2017-12-06
      相关资源
      最近更新 更多