2011-01-12 21 views
10

Sto usando OAuth-Ruby per eseguire un'autenticazione OAuth con un'applicazione Tumblr. Sono in grado di scrivere codice che progredisce attraverso i vari passaggi di OAuth, ma non riesco a ottenere un token di accesso o effettivamente a fare una richiesta. Posso ottenere una chiave di richiesta, reindirizzare l'utente a Tumblr per autenticare e concedere l'accesso e ricevere una chiave di richiesta autenticata. Ma non posso andare oltre.Ottenere un token di accesso con OAuth-Ruby e Tumblr API (Rails 3)

Ho registrato la mia applicazione Tumblr; supponiamo per questa domanda che mi ha fornito i seguenti tasti:

  • chiave utente OAuth: @oauth_consumer_key
  • chiave segreta: @secret_key

(ho i valori reali, ma sono tenerli nascosti qui per ovvi motivi.)

Sto eseguendo il seguente codice all'interno di un controller che viene eseguito quando l'utente invia un modulo, che forma le informazioni memorizzate nella variabile @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 

Questo codice consente di accedere alla pagina corretta di Tumblr, in cui l'utente concede o nega l'accesso della propria applicazione all'account dell'utente. Supponendo che l'utente conceda l'accesso, Tumblr reindirizza alla mia applicazione, a una richiamata che ho fornito quando ho registrato l'applicazione con Tumblr. A quel punto, tutto funziona magnificamente.

mio OAuth callback viene eseguito il seguente codice nel controller:

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 

Al Punto 3, c'è un problema. Io non riesco a ottenere in realtà un token di accesso con la linea:

@access_token = @request_token.get_access_token 

Qualcuno può dirmi che cosa devo fare per ottenere il token di accesso? Quando eseguo quella riga, ottengo un errore OAuth :: Unuthorized.

Ho davvero apprezzato qualsiasi consiglio. Sono stato su Google e ho provato cose diverse per più giorni. Grazie!

+3

Naturalmente, ora ho capito solo dopo l'invio. Per aiutare gli altri che potrebbero trovarsi su una barca simile, il problema è che l'implementazione di OAuth di Tumblr si aspetta la chiave oauth_verifier che passa al callback OAuth fornito. Quindi, il codice @access_token = @ request_token.get_access_token deve essere modificato in @access_token = @ request_token.get_access_token ({: oauth_verifier => params [: oauth_verifier]}). –

+0

Wow, questo mi ha aiutato molto. Tumblr dovrebbe menzionarlo nella pagina delle API, poiché ho sprecato alcune ore buone cercando di capire questo problema. – dreadpirateryan

risposta

2

io uso Pelle's oauth plugin e modificato un po 'per sostenere xauth in questo modo:

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

Si blocca e non risponde. Puoi confermare per favore che il tuo codice funzioni per te? – defhlt

Problemi correlati