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

FrankFang · 发布于 2016年09月25日 · 最后由 FrankFang 回复于 2016年09月25日 · 748 次阅读
96

最近在学习 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 吗?

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

共收到 5 条回复
1107

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

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

96

#1楼 @jasl 没用 devise 啊

96

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

96

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

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

96

#1楼 @jasl thanks 相通了

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