Получение токена доступа с API OAuth-Ruby и Tumblr (Rails 3)
Я использую OAuth-Ruby для аутентификации OAuth с помощью приложения Tumblr. Я могу написать код, который проходит через различные шаги OAuth, но я не могу получить токен доступа или фактически сделать запрос. Я могу получить ключ запроса, перенаправить пользователя в Tumblr для аутентификации и предоставления доступа и получить ключ аутентифицированного запроса. Но я не могу пройти дальше.
Я зарегистрировал приложение Tumblr; допустим для этого вопроса, что он предоставил мне следующие ключи:
- Ключ потребителя OAuth: @oauth_consumer_key
- Секретный ключ: @secret_key
(У меня есть фактические значения, но я скрываю их здесь по понятным причинам.)
Я запускаю следующий код в контроллере, который запускается, когда пользователь отправляет форму, форма которой хранит информацию в переменной @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
Этот код возвращает меня на правильную страницу в Tumblr, где пользователь предоставляет или запрещает моему приложению доступ к учетной записи пользователя. Предполагая, что пользователь предоставляет доступ, Tumblr перенаправляет обратно в мое приложение, на обратный вызов, который я предоставил, когда зарегистрировал приложение с помощью Tumblr. К этому моменту все прекрасно работает.
My OAuth callback запускает следующий код в контроллере:
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
На шаге 3 возникает проблема. Кажется, я не могу получить токен доступа с помощью строки:
@access_token = @request_token.get_access_token
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы получить токен доступа? Когда я запускаю эту строку, я получаю ошибку OAuth:: Unauthorized.
Я по-настоящему ценю любые советы. Я работаю в Google и много раз пробую несколько раз. Спасибо!
Ответы
Ответ 1
Я использую Pelle oauth plugin и немного изменил его, чтобы поддерживать xauth следующим образом:
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