使用OAuth时的用户模型设计

时间:2010-11-27 09:19:59

标签: ruby oauth mongomapper

我目前正在构建一个网络应用程序(我的第一个),并希望包含OAuth功能,以便用户可以通过Twitter和Facebook登录。我正在Sinatra建造它,并且看过OmniAuth宝石,它似乎适合这项工作。我遇到的问题是重新设计用户模型。

目前我有通常的名字,姓氏,用户名,电子邮件和密码,用户名是唯一的,这样我就可以用它作为ID,就像twitter一样,我可以输入www.myapp.com/username找到该用户的信息。我决定,对于初始版本,我只是使用twitter作为登录,然后是后来的facebook,最后是通常的注册。我的问题是,人们在Facebook上拥有与在twitter中相同的用户名的可能性很大。因此,例如,如果我使用Twitter登录并获取“新用户”ID,那么当来自facebook的具有相同用户名的人尝试加入时,这将是一个问题。

OmniAuth gem通过提供用户信息的哈希来工作。我将使用Mongo,所以我可以在用户模型中包含一个twitter和facebook字段,并将哈希保留在那里,我只是有点难过如何创建独特的ID,当它很可能是这两种服务都会有人使用相同的用户名,或者一旦实施常规登录,有人可以注册并获取已在twitter或facebook上使用的用户名,阻止这些人注册他们的Twitter / facebook帐户。

我真的很想知道其他人是如何接近这一点的。

1 个答案:

答案 0 :(得分:1)

我只使用表来表示身份验证密钥,它表示:user_id,:provider,:key列,以及一个单独的User表,:email,:nickname,...

如果用户使用其Twitter帐户登录,请退出并使用Google Acc登录。例如,那么您将拥有两个不同的帐户,并且没有解决方案将任何帐户与现有帐户相关联。我建议您允许登录用户将其当前使用的用户帐户链接到另一个身份验证提供程序(您应该将用户与身份验证分开,并且在首次登录后,他应该能够将更多身份验证密钥链接到他的用户帐户)。他登录到他的主要用户帐户(例如,使用推特)并将他的用户帐户链接到他的Google帐户,点击身份验证页面上的谷歌图标。