2011-01-12 39 views
10

Estoy usando OAuth-Ruby para hacer una autenticación OAuth con una aplicación Tumblr. Puedo escribir código que progresa a través de los diversos pasos de OAuth, pero no puedo obtener un token de acceso ni hacer una solicitud. Puedo obtener una clave de solicitud, redireccionar al usuario a Tumblr para autenticar y otorgar acceso, y recibir una clave de solicitud autenticada. Pero no puedo ir más allá de eso.Obtener un token de acceso con OAuth-Ruby y Tumblr API (Rails 3)

He registrado mi aplicación Tumblr; vamos a suponer para esta pregunta que me ha proporcionado las siguientes claves:

  • Clave de consumidor OAuth: @oauth_consumer_key
  • clave secreta: @secret_key

(Tengo valores reales, pero estoy manteniéndolos ocultos aquí por razones obvias.)

Estoy ejecutando el siguiente código dentro de un controlador que se ejecuta cuando el usuario envía un formulario, que forma almacena información en la variable @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 

Este código me lleva a la página correcta en Tumblr, donde el usuario otorga o niega el acceso de mi aplicación a la cuenta del usuario. Suponiendo que el usuario otorgue acceso, Tumblr redirige a mi aplicación, a una devolución de llamada que proporcioné cuando registré la aplicación con Tumblr. Hasta ese punto, todo funciona maravillosamente.

Mi OAuth de devolución de llamada se ejecuta el código siguiente en el controlador:

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 

En el Paso 3, no es un problema. Me parece que no puede conseguir realmente un token de acceso con la línea:

@access_token = @request_token.get_access_token 

Puede alguien decirme lo que tengo que hacer para obtener el token de acceso? Cuando ejecuto esa línea, obtengo un error de OAuth :: No autorizado.

Realmente aprecio cualquier consejo. He estado buscando en Google y probando cosas diferentes por varios días. ¡Gracias!

+3

Por supuesto, ahora me he dado cuenta justo después de la publicación. Para beneficiar a otros que podrían estar en un bote similar, el problema es que la implementación de Tumblr OAuth espera la clave oauth_verifier que pasa a la devolución de llamada OAuth que usted proporciona. Entonces, el código @access_token = @ request_token.get_access_token necesita ser cambiado a @access_token = @ request_token.get_access_token ({: oauth_verifier => params [: oauth_verifier]}). –

+0

Guau, esto me ayudó mucho. Tumblr debería mencionar esto en su página de API, ya que desperdicié algunas buenas horas tratando de resolver este problema exacto. – dreadpirateryan

Respuesta

2

yo uso Pelle's oauth plugin y modificado un poco para apoyar xauth así:

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

Se atasca y no responde. ¿Puedes confirmar que tu código funcione para ti? – defhlt

Cuestiones relacionadas