【发布时间】:2012-03-22 08:46:45
【问题描述】:
我正在使用 Omniauth 通过 OAuth 对 Twitter 用户进行身份验证(使用 omniauth-twitter gem)。我计划允许普通用户仅使用“读取”权限登录,并且仅在他们决定在站点内创建内容时授权“读写”权限。
在我的 Identity 模型中,我正在分析 AuthHashomniauth 传递给 create_with_omniauth 操作,并且我正在为每个提供程序类型制作单独的逻辑,以便我可以在必要时更深入地查看返回的哈希模式。
如果我 raise auth.to_yaml 输出结构,我会看到我想阅读的“x-access-level”标头,但我不知道如何查看 response: Net::HTTPOK 对象以便进入下一层结构。
这是auth结构,删掉一些不必要的细节
--- !ruby/hash:OmniAuth::AuthHash
provider: twitter
...
extra: !ruby/hash:Hashie::Mash
...
access_token: !ruby/object:OAuth::AccessToken
...
response: !ruby/object:Net::HTTPOK
http_version: '1.1'
code: '200'
message: OK
header:
x-access-level:
- read-write
x-ratelimit-limit:
- '350'
x-ratelimit-remaining:
- '348'
x-ratelimit-reset:
- '1330798604'
到目前为止,我可以使用auth["extra"]["access_token"].response 获得响应,但将.header 放在末尾会返回相同的响应结构,而当我提出["header"] 时,它是空的。
如果有必要,我可以使用 Twitter gem 在 Identity 模型中调用 verify_credentials(因为 Twitter 将 x-access-level 标头添加到每个响应中,但即使使用这种方法我也不知道如何读取返回的headers来读取x-access-level的header。
【问题讨论】:
-
你到底走哪条路?
-
不幸的是,自从我询问以来,我没有太多时间花在我自己的项目上,但是omniauth-twitter gem 的作者确实做了一些改变(可能在他的 github repo 的一个分支中)尝试让它工作。 IIRC 我尝试过但无法立即使用它,但后来我没有时间处理它。
标签: ruby-on-rails rest twitter twitter-oauth