繁体   English   中英

使用omniauth-twitter / twitter Gem读取Twitter REST API的x-access-level标头

[英]Reading x-access-Level header for Twitter REST API using omniauth-twitter / twitter Gem

我正在使用Omniauth通过OAuth(使用omniauth-twitter gem)通过Twitter对用户进行身份验证。 我计划允许普通用户仅使用“读取”权限登录,并且仅当他们决定在网站内创建内容时才授权“读写”权限。

在我的Identity模型中,我正在分析AuthHash omn​​iauth传递给create_with_omniauth动作,并且我为每种提供程序类型分别制定了逻辑,以便在必要时可以更深入地研究返回的哈希模式。

如果raise auth.to_yaml以输出结构, 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访问级别标头。

我知道这不是同一个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

希望这对其他人有帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM