OAuth2 с рубиновым камнем intridea - PullRequest
3 голосов
/ 30 августа 2011

У меня есть следующий код:

token = client.auth_code.get_token(code, :redirect_uri => 'http://localhost:3000')
response = token.get('https://api.foursquare.com/v2/users/self/checkins', {:mode => :query})

Проблема в том, что независимо от того, какой режим я укажу, я всегда получаю токен Bearer в заголовке авторизации. Рассматриваемый код является частным set_token, который всегда зависит от default: mode, который всегда: header.

Я использую это неправильно?

Спасибо!

1 Ответ

5 голосов
/ 05 сентября 2011

Кажется, есть проблема, когда гем oauth2 передает переменные внутри объектов, поэтому режим и имя_параметра, похоже, теряются в пути.Решением проблемы было бы создание нового объекта AccessToken с правильными параметрами вместо использования сокращения.Этот пример протестирован на API Foursquares и работает.

require "oauth2"

client = OAuth2::Client.new(
  "CLIENT_ID",
  "CLIENT_SECRET", 
  :authorize_url => "/oauth2/authorize", 
  :token_url => "/oauth2/access_token", 
  :site => "https://foursquare.com/"
)

puts client.auth_code.authorize_url(:redirect_uri => "http://localhost:4000")

code = gets.chomp

token = client.auth_code.get_token(code, :redirect_uri => "http://localhost:4000")

token = OAuth2::AccessToken.new(client, token.token, {
  :mode => :query,
  :param_name => "oauth_token",
})

response = token.get('https://api.foursquare.com/v2/users/self/checkins')

puts response.body
...