Чтение заголовка x-access-Level для Twitter REST API с использованием omniauth-twitter / twitter Gem - PullRequest
0 голосов
/ 04 марта 2012

Я использую Omniauth для аутентификации пользователей через Twitter через OAuth (используя omniauth-twitter gem). Я планирую разрешить обычным пользователям входить в систему только с правами «чтения» и разрешать права «чтения и записи» только в том случае, если / когда они решат создать что-то на сайте.

В моей модели Identity я анализирую проходы AuthHash omniauth в действии create_with_omniauth и создаю отдельную логику для каждого типа провайдера, чтобы при необходимости я мог заглянуть глубже в возвращаемую хеш-схему.

Если я raise auth.to_yaml выведу структуру, я вижу заголовок 'x-access-level', который мне хотелось бы прочитать, но я не знаю, как заглянуть в объект response: Net::HTTPOK, чтобы перейти на следующий уровень структуры.

Это структура авторизации, вырезая некоторые ненужные детали

--- !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, если необходимо выполнить verify_credentials вызов внутри модели Identity (поскольку Twitter добавляет заголовок x-access-level к каждому ответу, но даже при таком подходе я бы не знал, как читать возвращаемые заголовки для чтения заголовка x-access-level.

1 Ответ

0 голосов
/ 19 декабря 2017

Я знаю, что это не тот же Twitter-клиент ruby, но он может помочь другим, кто прибудет сюда после поиска того же вопроса с помощью 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

Надеюсь, это поможет другим ...

...