2012-02-14 56 views
2

我得到了與調試日誌的問題 - 如果發生錯誤錯誤日誌不顯示哪些用戶導致的錯誤,但設置的用戶名空 - security.DEBUG: Username "" was reloaded from user provider. [] []Symfony2的調試日誌不顯示用戶名

我使用自定義實體提供者根據cookbook tutorial撰寫。其他消息 - 例如security.INFO: User "......" has been authenticated successfully顯示正確。

注意:我發佈此問題的forum也。

回答

4

我有同樣的問題,並花了很多時間挖掘出來。

問題是您不要序列化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可用,這個問題是固定的。

注意:您的自定義用戶提供程序的'refreshUser'函數將永遠不會被使用,因爲它將被EntityUserProvider推翻!