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!
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]}). –
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