2011-08-29 95 views
3

我有以下代碼:OAuth2和intridea紅寶石寶石

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}) 

的問題是,不管是什麼:模式我指定我總是在Authorization頭承載令牌。有問題的代碼是一個私人的set_token,它總是取決於默認的:始終是:header的模式。

我使用它錯了嗎?

謝謝!

+0

嘿,我不確定你的問題是什麼?無記名標記是什麼意思? –

+0

請參閱最新的草案7.0(草案20)OAuth2 RFC:「授權:承載7Fjfp0ZBr1KtDRbnfVdmIw」 – Zepplock

回答

5

似乎是創業板的oauth2如何通過variabels物體內部,模式和PARAM_NAME似乎失去的方式有問題。解決該問題的方法是使用正確的參數創建新的AccessToken對象,而不是使用簡寫。這個例子是針對Foursquares API進行測試的,它可以工作。

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 
+0

我不認爲是這種情況。我有一個有效的訪問令牌,問題是它在請求中使用從API本身獲取數據的方式。我試過你的例子,沒有看到有什麼不同。您是否嘗試過使用foursquare運行它? – Zepplock

+0

gem中使用的訪問令牌參數的默認名稱是'bearer_token'。但是foursquare不使用該名稱,而是使用'oauth_token'。所以傳入'param_name'到請求中。我改變了這個例子。 –

+0

看來,oauth2客戶端不會傳遞正確的變量,因此您需要創建一個新的訪問令牌對象來繞過此操作。我做了一些代碼,並針對foursquare API進行了測試,並且它可以工作。你可以在https://gist.github.com/4aa03f41f158b7d52210 –