2011-08-29 1 views
3

나는 다음과 같은 코드가 있습니다OAuth2를

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

문제가를 그 상관없이 : 나는 항상 인증 헤더에서 무기명 토큰을 얻을 지정 모드. 문제의 코드는 항상 default : mode 인 always : header에 의존하는 private set_token입니다.

잘못 사용하고 있습니까?

감사합니다.

+0

안녕하세요, 귀하의 질문이 무엇인지 모르겠습니다. 무기명 토큰은 무엇을 의미합니까? –

+0

최신 (초안 20) OAuth2의 7.0 섹션을 참조하십시오. "Authorization : Bearer 7Fjfp0ZBr1KtDRbnfVdmIw" – Zepplock

답변

5

oauth2 gem이 오브젝트 내부에 variabels를 전달하여 mode와 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 자체에서 데이터를 가져 오기 위해 요청에 사용되는 방식입니다. 나는 너의 모범을 보았고 차이점을 보지 못했다. 정사각형에 맞춰 봤어? – Zepplock

+0

보석에 사용 된 액세스 토큰 매개 변수의 기본 이름은'bearer_token'입니다. 그러나 foursquare는 대신에'oauth_token'을 사용하는 이름을 사용하지 않습니다. 그래서'param_name'을 요청에 전달하십시오. 나는 그 모범을 바꿨다. –

+0

oauth2 클라이언트는 올바른 변수를 전달하지 않으므로이를 우회하기 위해 새 액세스 토큰 개체를 만들어야합니다. 몇 가지 코드를 작성하고 foursquares api에 대해 테스트했습니다. 이 코드는 https://gist.github.com/4aa03f41f158b7d52210 –

관련 문제