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