我的网站提供本地身份验证(电子邮件+密码)和社交身份验证(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的帐户了,呃哦!
显然这是错误的。但是,在创建帐户之前,不需要电子邮件验证的更好的方法?可能吗?我确信这已经在野外得到了解决,但我无法弄清楚如何在不影响用户体验的情况下实现这一目标。
我提出的选项,但它们似乎错了:
答案 0 :(得分:1)
在将帐户标记为已验证之前,请让用户输入密码。由于Bob不知道Alice的密码,他必须重置密码。