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