使用Oauth 2为用户建模

Dav*_*ite 8 facebook oauth oauth-2.0 ruby-on-rails-3

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

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

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

抱歉,这是一个开放式问题.

Bob*_*man 6

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

至于数据建模,你有正确的想法.你可能需要让它更通用一些.access_key您可能需要access_token并且可能需要refresh_tokenOAuth 2 而不仅仅是一个.同时,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
Run Code Online (Sandbox Code Playgroud)