Получение токена доступа с OAuth-Ruby и Tumblr API (Rails 3) - PullRequest
10 голосов
/ 13 января 2011

Я использую 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. К этому моменту все прекрасно работает.

Мой обратный вызов OAuth запускает следующий код в контроллере:

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.

Я действительно ценю любой совет. Я гуглил и пробовал разные вещи в течение нескольких дней. Спасибо!

1 Ответ

2 голосов
/ 14 апреля 2011

Я использую Плагин oauth от Pelle и немного изменил его, чтобы поддерживать 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 => "some@email.com", 
                                                    :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
...