我正在使用Omniauth通过OAuth使用Twitter对用户进行身份验证(使用omniauth-twitter
gem)。我计划允许普通用户使用“读取”权限登录,并且只有在他们决定在网站内创建内容时才授权“读写”权限。
在我的Identity
模型中,我正在分析AuthHash
omniauth传递给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标头,但即使采用这种方法,我也不知道如何阅读返回用于读取x-access-level标头的标头。
我知道这不是同一个ruby twitter客户端,但在使用ruby twitter客户端(gem“twitter”)寻找相同问题之后,它可能会帮助其他人到达这里。
所以从这个电话:
twitter_client = Twitter::Client.new(:oauth_token => token, :oauth_token_secret => secret)
twitter_client.verify_credentials
这将只给你用户信息json。您实际上可以获得twitter api响应,然后检查标头中包含的x-access-level
resp = twitter_client.get, "/1.1/account/verify_credentials.json"
resp[:response_headers]["x-access-level"] # "read-write" in my case
希望这有助于其他人......