我正在使用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教程了!
对于开放式问题,我们深表歉意。
答案 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