我有一个关于使用Omniauth构建用户系统的一般性问题:当我启用多种身份验证方法时,我想确保用户无法通过其他提供商再次注册 - 无论是意外还是故意。我的尝试是查看电子邮件地址,这适用于大多数提供商。
但是当我通过Twitter添加身份验证时,此系统自Twitter won't publish the email of the user以来失败。
因此,我唯一可以解决的方法是在通过Twitter(或任何其他不发布电子邮件的登录提供商)登录时添加第二步注册,我只是想知道是否有更方便如何做到这一点?
感谢任何帮助或建议!
答案 0 :(得分:0)
LinkedIn会遇到同样的问题。此外,我个人为我加入的每个网站使用不同的电子邮件。所以,即使您要求我的电子邮件无法帮助您识别我。如果您仅使用Omniauth而不是Devise,则可以在每次用户登录时检查他们是否也使用其他服务登录并合并帐户。这似乎是不必要的,因为人们通常会一直登录他们的twitter / fb帐户。只要您在提供注册页面之前检查两者,您就应该是金色的。如果您真的试图阻止人们拥有多个帐户,您需要要求并验证手机号码或严格依赖单个提供商。
答案 1 :(得分:0)
您真正关心的是用户进行身份验证,一旦他/她拥有,您只需要跟踪经过身份验证的用户ID以及他们用于身份验证的服务。因此,如果一个人在Twitter下登录并尝试在Facebook下登录,则您的代码需要知道与该Twitter用户关联的user_id(如果您关注Ryan Bate的railscast,则不是UID)并且该Facebook用户需要具有相同的user_id。你仍然会让他使用第二个服务进行身份验证,但最后一步是检查user_id登录的服务(与他们刚刚登录的服务相比。如果服务不同,则意味着他们试图在第二次服务中潜入。而你可以处理它。