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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用omniauth-twitter / twitter Gem读取Twitter REST API的x-access-Level标头相关的知识,希望对你有一定的参考价值。

我正在使用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

希望这有助于其他人......

以上是关于使用omniauth-twitter / twitter Gem读取Twitter REST API的x-access-Level标头的主要内容,如果未能解决你的问题,请参考以下文章

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

带有 Rails 5 的 Omniauth-twitter 停止工作! OAuth::Unauthorized 403 Forbidden

使用omniauth-twitter的Ruby on Rails应用程序在heroku上不起作用“很抱歉,出了点问题。”

如何使用“Twit”库从列表中选择一个随机单词

使用 Twit 通过机器人发布视频

使用Twit包在用户资料上发布Tweet