2011-10-23 41 views
3

我想的OpenID與FOSUserBundle這個項目的基礎上集成: http://symfony2bundles.org/diegogd/fosuser-fpopenidOpenID支持FOSUserBundle在Symfony2中

不幸的是,他們是錯誤的。一個是配置問題(誰想要嘗試的人): 在SRC/SC/UsersBundle /資源/配置/路由8號線/ security.xml文件應閱讀 SCUsersBundle:安全:登錄

這暗示了項目從未完成。解決之後,我得到「SQLSTATE [23000]:完整性約束違規:1048'email'列不能爲空' 這似乎是由於User對象已序列化並且出於某種原因FOSUserBundle不包含在「序列化」方法中發送電子郵件。

之後,其他一些屬性被包含到重寫方法(包括「id」)中,系統仍然希望創建一個新條目而不是更新現有條目。

任何想法?

+0

公告修正:了,如果你想保持你的理智,不要使用fpOpenID。它沒有被更新一年,它會打破當前的PHP/Symfony2版本,因爲像getExtraInformation()這樣的重要方法已被棄用。 – Tom

回答

1

在FOSUserBundle的InteractiveLoginListener中反序列化用戶對象時出現問題。現在,您可以手動設置安全令牌並將用戶重定向到另一個頁面,而不是將它們發送回fos_user_security_check。

例如,而不是這樣的:

// IMPORTANT: It is required to set a user to token (UserInterface) 
$newToken = new OpenIdToken($token->getOpenIdentifier(), $user->getRoles()); 
$newToken->setUser($user); 

$tokenPersister->set($newToken); 

// IMPORTANT: It is required make a redirect to `login_check` with parameter `openid_approved` 
return $this->redirect($this->generateUrl('login_check_route', array('openid_approved' => 1))); 

這樣做:

// IMPORTANT: It is required to set a user to token (UserInterface) 
$newToken = new OpenIdToken($token->getOpenIdentifier(), $user->getRoles()); 
$newToken->setUser($user); 

$tokenPersister->set($newToken); 
$this->get('security.context')->setToken($newToken); 

return $this->redirect($this->generateUrl('authenticated_user_dashboard')); 

其中 「authenticated_user_dashboard」 是您希望用戶最終對任何內部的着陸頁。

請注意,由於未調用FOSUserBundle的InteractiveLoginListener :: onSecurityInteractiveLogin(),因此上次登錄時間將不會自動更新。

這是一個已知的問題,makasim正在調查:https://github.com/formapro/FpOpenIdBundle/issues/5

0

主分支包含問題