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