新手问题 如何关联多个第三方登录 (oAuth2)

FrankFang · 2016年09月25日 · 最后由 FrankFang 回复于 2016年09月25日 · 2270 次阅读

最近在学习 Rails,做 oAuth2 登录的时候想不通一个问题。 需求: User 表示用户,Identity 表示一个第三方认证(Facebook、GitHub 或 Twitter),User has many Identity。 现在希望做到的流程是(问题出在第 5 步)

  1. 用户用 Facebook 登录(得到一个 Identity 记录),系统生成一个空的 user 记录,提示需要先设置这个 user 的 email 和 password
  2. 于是用户设置了自己的 email 和 password,系统更新 user。
  3. 用户登出
  4. 同一个用户,用 GitHub 登录(有得到一个 Identity 记录)
  5. 系统这是仍然会生成一个空的 user 记录,并提示「需要先设置 user 的 email 和 password」。这样做是有问题的,因为一个用户,对应两个 user 了,难道我以后还要想办法合并这两个 user 吗?

我觉得我这样做有问题,但是又不知道怎么解决。 请指教。

devise 可以不强制要求 email 通过覆盖一个方法来控制,具体看 devise 的 wiki(也有可能是我翻源码发现的...) 通过第三方登录生成一个 fake 的密码就好了

如果你需要一定填写邮箱密码,你可以拿到授权信息后,不要立刻创建 identity 和 user,存到 session 或者什么地方去,填写邮箱密码正确,注册 User 成功后,读出来(如果有)再创建 identity,挂到刚创建的 User 去就好了

#1 楼 @jasl 存到 session 好像可以

#1 楼 @jasl 但是第二个 user 怎么办?还是会出现重复。

我看一般的流程是先注册再绑定第三方,规避了这个问题

需要 登录 后方可回复, 如果你还没有账号请 注册新账号