2013-10-17 20 views
4

我试图安排能够使用社交网络(最初是LinkedIn,但可以是任何其他,或者从FosUserBundle自行生成)登录,然后将新连接添加到相同的用户,通过Twitter,FB,Github等。连接到HWIOauthBundle中的多个社交登录

难以连接FosUser和HWIOauthBundles中的多个帐户连接。为了尽可能多地收集数据,并且能够轻松地将其他连接添加到服务中,我真的希望将每个新连接都作为一对多记录。 IE:首次登录LinkedIn会创建一个FosUser记录,并且在'socialLogin'表中有一个新行,下一个(比如说使用Twitter登录)会在'socialLogin'表中添加一个新行,这个行会返回到fosUser.id 。

如何将当前登录的(Fos)用户用作HWIOauth生成的新记录的一部分?最终的结果是,能够与任何已知用户登录进入同一个帐户。

回答

0

第一步是创建用户实体和social_data表之间的关系,其余的都是关于覆盖自定义用户提供者FOSUBUserProvider.php,我相信你已经开始做,因为你有FOSUserBundle和HWIOAuthBundle工作一起。

我稍后会对实际代码进行一些修改,但我必须回答这个问题才能让您在此之前加入。

1

该解决方案实际上很简单。首先检查Symfony2: How to login using OAuth (HWIOAuthBundle) + custom roles (by default and loaded from DB)这对HwiOAuthBundle是一个很好的指导,然后向下滚动并仔细查看公共函数loadUserByOAuthUserResponse(){...}部分。

从那里,您的工作流程将检查响应对象的提供者名称。然后根据提供者名称,您可以更新您的用户(使用电子邮件进行搜索)。但是,对于twitter,您可能会遇到问题,因为twitter不提供用户电子邮件。因此,您需要向您的用户询问该电子邮件地址,并且在获得该电子邮件地址后,您可能需要将当前用户帐户(对于基于Twitter的帐户,将其视为临时帐户)与以前的用户帐户合并。否则,如果您的用户已经使用form/other-social-login(在与twitter连接之前)登录,则可以在他与其连接时添加他的Twitter详细信息。但是你需要保存当前登录会话的细节用户的(这样就可以获取该用户回来与Twitter令牌之后)

希望它可以帮助

+0

这似乎仍然是使用来自不同帐户检索到的数据连接它们。我在FB&Linkedin和其他网站上有不同的电子邮件地址。我正尝试创建一个基于FosUser的初始帐户,并不断添加新的社交帐户,避免任何需要搜索任何信息的情况,这些信息甚至可能不在那里。 –