8

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

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

我现在正在思考的是如何将其集成到我现有的用户模型中,该模型基本上由一个拥有电子邮件、姓名和密码的用户表组成。

我是否应该保留我的 users 表并设置一个 Access Providers 表:

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

让我们说一个“用户 Facebook 信息”表,我在其中存储有关用户的信息,这些信息是通过访问 Facebook 图表中的用户而收集的?

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

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

对不起,开放式问题。

4

1 回答 1

6

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

至于数据建模,您的想法是正确的。不过,您可能需要使它更通用一些。access_key对于 OAuth 2 ,您可能需要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
于 2011-03-02T04:15:13.183 回答