将开放式身份验证登录添加到用户模型时,表结构应该是什么样子

时间:2009-11-27 16:19:01

标签: ruby-on-rails database-design oauth

我有一个带有用户模型的Rails应用程序。我想允许用户使用一些服务登录。我有两种方法可以将其存储在数据库中,但我不确定哪种方法最好。我应该注意,我希望用户能够连接多个服务并链接帐户。

方法1: 对于每个服务,将令牌/秘密字段添加到User表。这似乎有点问题,因为如果我想存储,例如,Twitter令牌,Twitter秘密,推特屏幕名称和推特配置文件img?我可以看到User表有许多未使用的列。我希望每个服务都存储额外的信息。它看起来像这样:

id
twitter_token
twitter_screenname
twitter_secret
twitter_pic
facebook_token
facebook_secret
facebook_pic
facebook_name
google_token
google_secret
google_name
etc.

方法2:
或者每个用户可以拥有许多社交登录,并且每个社交登录属于一个用户。然后我会有一个看起来像

的表
user_id
token
secret
social_type  # foreign key to a social_site look up table
social_pic

并且社交类型表看起来像:

id
social_site_name
oauth_url

这种方法的唯一不利之处在于我必须概括我将存储的关于所有服务的内容。你们是怎么做到的?也许STI在这里是有秩序的......每个类型的登录都有一个类,它继承自基础登录类。

谢谢!

1 个答案:

答案 0 :(得分:10)

我会建议这样的事情:

  • 每个用户可以有多个登录,每个登录仅属于一个用户
  • 登录属于特定类型,一个登录仅属于类型
  • SocialLogin表包含所有登录类型共有的字段,GoogleFaceBookTwitter表具有特定于每个字段的字段。

login_model_01