我正在使用Oauth gem登录我的网络应用程序,使用Facebook,Twitter和谷歌帐户。为此,我在每个项目中创建了一个项目,并获得了app id和secret id。我希望在我的数据库中只有一个条目,即使用户在三者中都使用相同的邮件ID登录。我们将以下信息存储在数据库中(电子邮件,名称,提供商,uid)。问题是twitter不提供邮件ID。所以我计划从昵称生成邮件ID。
user.rb
//for facebook and google
user = User.create(name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20],
)
//for twitter
user = User.create(name: auth['info']['nickname'],
provider: auth.provider,
uid: auth.uid,
email: auth['info']['nickname'] + '@twitter.com',
password:Devise.friendly_token[0,20],
)
例如
我在facebook,twitter和google中使用邮件ID example@gmail.com登录。但在我的数据库中它创建了两个条目
11 | example@gmail.com // for facebook and google
12 | nickname@twitter.com // for twitter
我没有这种行为。是否有任何其他可能的方法来找到登录用户是同一个人?我只想要一个条目。如果可能的话,请建议我任何更好的方法。
答案 0 :(得分:0)
据我所知,目前这并不容易。如果Twitter和其他服务之间没有共同的信息,您如何自动关联它们?此外,如果您为通过Twitter登录的用户组成@twitter.com
电子邮件地址,那么您的数据库中有一个无效/无法使用的电子邮件地址(除非该人是Twitter的员工并且碰巧有Twitter名称与其电子邮件地址的本地部分相同 - 但更糟糕的是,如果有人的Twitter名称与Twitter员工的电子邮件地址的本地部分匹配但不是该员工,则您有一个有效的电子邮件地址但是您网站上的用户并不拥有它 - 我不知道这是否可以随意使用,如果您正在使用:确认他们无法确认电子邮件地址。
你至少有几个选择:
对于一个全面的系统,您可能希望允许人们合并任意帐户,例如,在Google和Facebook上使用不同的电子邮件地址注册同一个人的情况。
此外,请注意,对于通过Facebook登录的用户,您不一定会从Facebook收到电子邮件地址。人们可以只使用电话号码在Facebook注册,因此在这种情况下Facebook没有他们的电子邮件地址。