【发布时间】:2015-12-02 22:24:40
【问题描述】:
我的网站提供本地身份验证(电子邮件 + 密码)和社交身份验证(facebook、google 等)。
有 2 个用户:Alice(恶意)和 Bob(好)。
Alice 使用本地身份验证创建一个帐户。她使用 Bob 的电子邮件。她的帐户在 DB 中如下所示:
email: 'bob@bob.com'
password: 'hunter2'
isEmailVerified: false
现在,Bob 加入了我的网站。他通过 google 的 oauth 2 加入。由于他的电子邮件已经存在于数据库中,我们对其进行验证,并且他的 google 信息已附加到该帐户:
email: bob@bob.com
password: 'hunter2'
isEmailVerified: true
googleAuth: {
name: 'Bob smith'
}
现在,Alice 可以访问 Bob 的帐户了,哦哦!
显然这是错误的。但是,在创建帐户之前不需要验证电子邮件,有什么更好的方法呢?是否可以?我确信这已经在野外解决了,但我无法弄清楚如何在不影响用户体验的情况下做到这一点。
我想出的选项,但它们似乎是错误的:
- 如果电子邮件未通过验证,请删除 Alice 的帐户并为 Bob 创建一个新的单独帐户
- 禁止 Bob 加入,因为他的电子邮件已在使用中
- 从帐户中删除密码,使 Alice 无法登录
- 在验证电子邮件之前不要创建帐户(对用户不友好)
【问题讨论】:
-
那么,如果您没有检查其真实性,您如何相信某些信息(电子邮件)?如果没有证明它是有效的,那么使用称为“电子邮件”的标识符有什么意义?
-
没错,但我访问的绝大多数网站都允许我创建帐户而无需先验证我的电子邮件。我很好奇,他们是怎么处理的?
-
如何告诉用户有一个用户在使用该电子邮件帐户,然后向他显示正在使用他的电子邮件的帐户的用户名,并选择“不是你?”如果他点击它让他能够验证他的电子邮件,如果他确实验证了电子邮件然后删除 mailicious 帐户。
-
@ivan 我喜欢这个,但我没有用户名字段,所以我必须向 Bob 提供 Alice 的另一条个人信息。不确定这是否可以...
-
我真的不认为那没问题,所以与其提供用户名,不如再向他展示一次电子邮件帐户以确保如果他声称那是他的电子邮件帐户,那么让他尝试验证如果他确实验证了它,让他更改帐户的密码
标签: javascript authentication oauth-2.0