使用Oauth 2为用户建模

时间:2011-03-01 17:53:30

标签: ruby-on-rails-3 facebook oauth oauth-2.0

我正在使用rails 3构建一个Web应用程序。我有自己的用户注册,登录和身份验证工作正常,我希望添加Oauth 2实现,以便人们可以连接Facebook并使用更少的步骤登录/注册

我已经成功开始了这项工作。到目前为止,我可以让facebook验证用户身份并允许我访问他们的信息。我还没有尝试过设置Twitter auth,但我认为它会以类似的方式工作。

我现在正在思考的是如何将其整合到我现有的用户模型中,该用户模型基本上包含一个有电子邮件,姓名和密码的用户表。

我应该保留我的用户表并设置Access Providers表:

id | user_id | provider_id | access_key
---------------------------------------
1  |    4    |     1       |   xyz
2  |    4    |     2       |   pqr
3  |    7    |     1       |   dfr

并且让我们说“用户Facebook信息”表格,其中我存储了有关用户的信息,这些信息是从Facebook图表中访问该用户那里收集到的?

通过这种方式,我可以使用每个用户拥有的核心信息对Users表进行规范化,无论他们是否通过Facebook连接(姓名,电子邮件,密码),并使用他们的Facebook个人资料中的数据补充该数据(如果可用) ?

有更好的方法吗?是否有一个很好的指南或教程来设计这种类型的数据库模型(想想Quora)?我也可以处理PHP教程了!

对于开放式问题,我们深表歉意。

1 个答案:

答案 0 :(得分:6)

如果您尝试同时使用Twitter和Facebook,您可能需要为您的OAuth客户端考虑Signet或OmniAuth。自从我写这篇文章以来,我偏向于Signet,但OmniAuth现在可能是更好的选择,因为它已经存在了一段时间,取决于你想要做什么。

至于数据建模,你有正确的想法。你可能需要让它更通用一些。对于OAuth 2,您可能需要access_key而可能需要access_token,而不仅仅是refresh_token。同时,OAuth 1使用凭据密钥/密钥对。所以可能是这样的(省略主键和外键):

auth_scheme | access_token | refresh_token | key | secret | username | password
-------------------------------------------------------------------------------
oauth_1     |              |               | 123 | 456    |          |
oauth_2     | 123          |               |     |        |          |
oauth_2     | 123          | abcd          |     |        |          |
xauth       |              |               |     |        | abcd     | 12345
clientlogin |              |               |     |        | abcd     | 12345