2012-07-20 48 views
5

我有類User作爲基類,然後我從用戶類擴展了Teacher。使用symfony2和doctrine獲取「無法刷新用戶」錯誤

當我嘗試登錄我得到這個錯誤

你不能從一個不 包含標識符的EntityUserProvider刷新用戶。用戶對象必須使用由Doctrine映射的 自己的標識符進行序列化。

我有序列化/反序列化功能user.php的,因爲我已經能夠適應從FOSUserbundle

public function serialize() 
    { 
     return serialize(array(
      $this->password, 
      $this->salt, 
      $this->usernameCanonical, 
      $this->username, 
      $this->expired, 
      $this->locked, 
      $this->credentialsExpired, 
      $this->enabled, 
     )); 
    } 

我無法找到我在哪裏可以檢查錯誤。我被卡住了。請幫忙

回答

4

codeEntityUserProvider.php看來你也要序列化id的用戶了。

6
"You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine." 

這不是問題的答案,但如果有人使用上面的錯誤消息(就像我做的那樣),這是最受歡迎的。自從我找到我的解決方案後,我想我會分享。

如果您從數據庫中刪除當前用戶,然後嘗試重定向用戶,將會出現此錯誤。 (這可能看起來像一個愚蠢的錯誤,但錯誤消息肯定沒有幫助!)解決方案是在重定向之前清除會話。

$this->get('security.context')->setToken(null); 
$this->get('request')->getSession()->invalidate(); 
+0

謝謝!我有這個確切的問題;刪除用戶實體,並嘗試重新指向登錄頁面,並得到上述錯誤。使用Google錯誤信息,瞧!登陸這裏!你努力爲我節省了一噸。 – 2014-01-10 01:19:17

+1

注意:對於Symfony 2.6+,你必須使用'$ this-> get('security.token_storage')'。 – hchr 2016-11-27 09:03:31

0

剛把使用class table inheritance同樣的問題,它是通過在id屬性設置爲private能見度引起的,所以子類無法訪問ID,改變這protected解決它。

相關問題