4

我正在尝试安排能够使用社交网络登录(最初是 LinkedIn,但它可以是任何其他的,或者从 FosUserBundle 自行生成),然后通过 Twitter、FB、Github 向同一用户添加新连接,等等

困难在于在 FosUser 和 HWIOauthBundles 中连接多个帐户连接。为了尽可能多地收集数据,并能够轻松地向服务添加额外的连接,我真的希望将每个新连接都作为一对多记录。IE:使用 LinkedIn 的初始登录创建一个 FosUser 记录,并在“socialLogin”表中创建一个新行,下一个(例如使用 Twitter 登录)向“socialLogin”表添加一个新行,该行引用回 fosUser.id .

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

4

2 回答 2

1

解决方案其实很简单。首先查看Symfony2: How to login using OAuth (HWIOAuthBundle) + custom roles(默认情况下并从 DB 加载)这是 HwiOAuthBundle 的一个很好的操作方法,然后向下滚动并仔细查看公共函数 loadUserByOAuthUserResponse(){ .. 。 } 部分。

从那里,您的工作流程将检查响应对象中的提供程序名称。然后根据提供商名称,您可以更新您的用户(使用电子邮件进行搜索)。但是,使用 twitter 您可能会遇到问题,因为 twitter 不提供用户电子邮件。因此,您需要向您的用户询问该电子邮件地址,在获得该电子邮件地址后,您可能需要将当前用户帐户(对于基于 twitter 的注册,将其视为临时 a/c)与此电子邮件的先前用户帐户合并。

否则,如果您的用户已经使用 form/other-social-login 登录(在连接 twitter 之前),您可以在他连接后添加他的 twitter 详细信息。但是您需要在会话中存储用户当前登录的详细信息(以便您可以在用户返回 twitter 令牌后获取它)

希望能帮助到你

于 2013-10-26T16:07:30.827 回答
0

第一步是创建用户实体和 social_data 表之间的关系,剩下的就是覆盖自定义用户提供程序 FOSUBUserProvider.php,我相信你已经开始这样做了,因为你有 FOSUserBundle 和 HWIOAuthBundle 一起工作。

稍后我将使用实际代码进行一些编辑,但在那之前我必须回答这个问题才能让你走上正轨。

于 2013-10-22T06:28:47.553 回答