将本地帐户与社交认证合并

时间:2015-12-02 22:24:41

标签: javascript authentication oauth-2.0

我的网站提供本地身份验证(电子邮件+密码)和社交身份验证(Facebook,谷歌等)。

有2个用户:Alice(恶意)和Bob(好)。

Alice使用本地身份验证创建帐户。她使用鲍勃的电子邮件。她的帐户在DB中看起来像这样:

email: 'bob@bob.com'
password: 'hunter2'
isEmailVerified: false

现在,Bob加入了我的网站。他通过谷歌的oauth 2加入。由于他的电子邮件已存在于数据库中,我们会对其进行验证。他的谷歌信息附在账户上:

email: bob@bob.com
password: 'hunter2'
isEmailVerified: true
googleAuth: {
  name: 'Bob smith'
}

现在,Alice可以访问Bob的帐户了,呃哦!

显然这是错误的。但是,在创建帐户之前,不需要电子邮件验证的更好的方法?可能吗?我确信这已经在野外得到了解决,但我无法弄清楚如何在不影响用户体验的情况下实现这一目标。

我提出的选项,但它们似乎错了:

  • 如果电子邮件未经过验证,则删除Alice的帐户&为Bob
  • 创建一个新的独立帐户
  • 禁止Bob加入,因为他的电子邮件已在使用中
  • 从帐户中删除密码,以便Alice无法登录
  • 在验证电子邮件(用户不友好)之前不要创建帐户

1 个答案:

答案 0 :(得分:1)

在将帐户标记为已验证之前,请让用户输入密码。由于Bob不知道Alice的密码,他必须重置密码。