我正在尝试安排能够使用社交网络登录(最初是LinkedIn,但它可以是任何其他,或者从FosUserBundle自行生成),然后通过Twitter,FB向同一用户添加新连接,Github等。
难点在于连接FosUser和HWIOauthBundles中的多个帐户连接。为了尽可能多地收集数据,并能够轻松地向服务添加其他连接,我真的希望将每个新连接作为一对多记录。 IE:使用LinkedIn初始登录会创建一个FosUser记录,并在'socialLogin'表中创建一个新行,下一个(比如使用Twitter登录)会在'socialLogin'表中添加一个新行,该行返回fosUser.id
如何将当前登录的(Fos)用户用作HWIOauth将生成的新记录的一部分?最终结果是,能够与任何已知用户登录以进入同一帐户。
答案 0 :(得分:1)
解决方案实际上很简单。首先查看Symfony2: How to login using OAuth (HWIOAuthBundle) + custom roles (by default and loaded from DB)这是HwiOAuthBundle的一个很棒的方法,然后向下滚动并仔细查看公共函数loadUserByOAuthUserResponse(){...}部分。
从那里,您的工作流将检查响应对象中的提供程序名称。然后根据提供商名称,您可以更新您的用户(使用电子邮件进行搜索)。但是,有了Twitter,您可能会遇到问题,因为Twitter不提供用户电子邮件。因此,您需要向您的用户询问该电子邮件地址,并在获得该电子邮件地址后,您可能需要将当前用户帐户(对于基于Twitter的reg,将其视为临时a / c)与此电子邮件的先前用户帐户合并。
否则,如果您的用户已使用表单/ other-social-login登录(在与Twitter连接之前),您可以在连接后添加他的Twitter详细信息。但是您需要在会话中存储用户当前登录的详细信息(以便您可以在用户使用Twitter令牌返回后获取它)
希望有所帮助
答案 1 :(得分:0)
第一步是创建用户实体和social_data表之间的关系,剩下的就是覆盖自定义用户提供程序FOSUBUserProvider.php,我相信你已经开始做了,因为你有FOSUserBundle和HWIOAuthBundle一起工作
我稍后会对实际代码进行一些编辑,但是我必须回答这个问题才能让你在赛道上直播。