2011-01-12 12 views
10

Używam OAuth-Ruby do uwierzytelniania OAuth w aplikacji Tumblr. Jestem w stanie napisać kod, który przechodzi przez różne etapy OAuth, ale nie mogę uzyskać tokena dostępu lub wysłać prośby. Mogę uzyskać klucz żądania, przekierować użytkownika do Tumblr w celu uwierzytelnienia i udzielenia dostępu oraz odebrać uwierzytelniony klucz żądania. Ale nie mogę dostać dalej niż to.Uzyskiwanie tokena dostępu za pomocą interfejsu API OAuth-Ruby i Tumblr (Rails 3)

Mam zarejestrowaną aplikację Tumblr; załóżmy na to pytanie, że dostarczył mi z następujących klawiszy:

  • OAuth klucz klienta: @oauth_consumer_key
  • Tajny Klucz: @secret_key

(mam rzeczywiste wartości, ale jestem ukrywanie ich tutaj z oczywistych powodów.)

Uruchomiłem następujący kod w kontrolerze, który uruchamia się, gdy użytkownik przesyła formularz, który to formularz przechowuje informacje w zmiennej @tumblog:

#0. provided when registering application 
@key = @oauth_consumer_key 
@secret = @secret_key 
@site = 'http://www.tumblr.com' 
@consumer = OAuth::Consumer.new(@key, @secret, 
           { :site => @site, 
           :request_token_path => '/oauth/request_token', 
           :authorize_path => '/oauth/authorize', 
           :access_token_path => '/oauth/access_token', 
           :http_method => :post }) 
if @consumer 
    #1. get a request token 
    @request_token = @consumer.get_request_token; 
    session[:request_token] = @request_token 
    session[:tumblog] = @tumblog 

    #2. have the user authorize 
    redirect_to @request_token.authorize_url 
else 
    flash[:error] = "Failed to acquire request token from Tumblr." 
    render 'new' 
end 

Ten kod prowadzi mnie do właściwej strony w Tumblr, gdzie użytkownik udziela lub odmawia dostępu mojej aplikacji do konta użytkownika. Zakładając, że użytkownik przyznaje dostęp, Tumblr przekierowuje z powrotem do mojej aplikacji, do wywołania zwrotnego, które podałem, gdy zarejestrowałem aplikację w Tumblr. Do tego momentu wszystko działa pięknie.

My OAuth zwrotna działa następujący kod w kontrolerze:

if params[:oauth_token] && params[:oauth_verifier] 
    @tumblog = session[:tumblog] 
    @request_token = session[:request_token] 

    #3. get an access token 
    @access_token = @request_token.get_access_token 

    . . . . 
end 

W kroku 3, nie ma problemu. I nie wydaje się, aby rzeczywiście uzyskać token dostępu z linii:

@access_token = @request_token.get_access_token 

Czy ktoś może mi powiedzieć, co trzeba zrobić, aby otrzymać token dostępu? Po uruchomieniu tej linii otrzymuję błąd OAuth :: Nieautoryzowany.

Naprawdę doceniam każdą radę. Prowadziłem Google i próbowałem różnych rzeczy przez wiele dni. Dzięki!

+3

Oczywiście, teraz mam zorientowaliśmy się tuż po nadaniu. Aby pomóc innym osobom znajdującym się na podobnej łodzi, problemem jest to, że implementacja OAuth Tumblr oczekuje klucza Oauth_verifier, który przechodzi do wywołania zwrotnego OAuth, które dostarczasz. Zatem kod @ access_token = @ request_token.get_access_token musi zostać zmieniony na @ access_token = @ request_token.get_access_token ({: oauth_verifier => params [: oauth_verifier]}). –

+0

Wow, to bardzo mi pomogło. Tumblr powinien o tym wspomnieć na swojej stronie API, ponieważ zmarnowałem kilka dobrych godzin próbując znaleźć ten dokładny problem. – dreadpirateryan

Odpowiedz

2

używam Pelle's oauth plugin i modyfikowane to trochę wspierać XAUTH tak:

require 'rubygems' 
require 'oauth' 

CONSUMER_KEY = 'YOUR_CONSUMER_KEY' 
CONSUMER_SECRET = 'YOUR_CONSUMER_SECRET' 

consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => 'https://www.tumblr.com/oauth/access_token') 
access_token = consumer.get_access_token(nil, {}, { :x_auth_mode => 'client_auth', 
                :x_auth_username => "[email protected]", 
                :x_auth_password => "password"}) 
tumblr_credentials = access_token.get('http://www.tumblr.com/api/authenticate') 

puts access_token 
puts access_token.token 
puts access_token.secret   
puts tumblr_credentials.body 
+1

To utknie i nie odpowiada. Czy możesz potwierdzić, że twój kod działa dla ciebie? – defhlt

Powiązane problemy