3

我正在尝试在此项目的基础上将 openID 与 FOSUserBundle 集成:http: //symfony2bundles.org/diegogd/fosuser-fpopenid

不幸的是,他们有错误。一个是配置问题(对于想要尝试的人): src/SC/UsersBundle/Resources/config/routing/security.xml 中的第 8 行应该是 SCUsersBundle:Security:login

这暗示该项目从未完成。解决后,我得到“SQLSTATE [23000]:完整性约束违规:1048 列'电子邮件'不能为空”这似乎是由于用户对象被序列化并且由于某种原因 FOSUserBundle 不包括电子邮件在“序列化”方法中。

在那之后,以及一些其他属性被包含在一个覆盖方法中(包括“id”),系统仍然希望创建一个新条目而不是更新现有条目。

有任何想法吗?

4

2 回答 2

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

于 2011-10-28T21:27:44.847 回答
0

主分支包含问题的修复

于 2012-03-27T09:20:33.447 回答