ruby-on-rails-3 - 使用 Oauth 2 为用户建模

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

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

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

我现在正在考虑的是如何将其集成到我现有的用户模型中,该模型主要由具有电子邮件、姓名和密码的用户表组成。

我是否应该保留我的用户表并设置一个访问提供者表:

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 教程!

很抱歉这个开放式问题。

最佳答案

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

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

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

关于ruby-on-rails-3 - 使用 Oauth 2 为用户建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5158361/

相关文章:

ruby-on-rails-3 - Rails 3 中使用 Prototype 而非 jQuery 的 Ajax 回调

ruby-on-rails - Ruby 时间和范围(包含/排除)

mysql - 提交隐藏字段和/或 mysql 关系

ios - canOpenURL :facebookAppURL return false, 即使安装了 Facebook App

facebook - 如何授权 Facebook 应用程序? PHP

ruby-on-rails - 带有 nokogiri 的空 html

javascript - 如何获取 Facebook 好友的生日?

ios - 如何在 facebook ios 中获取访问 token

android - OAuth 最佳学习资源

Java:Google+ OAuth header 无效