10

OAuth-Ruby を使用して、Tumblr アプリケーションで OAuth 認証を行っています。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 エラーが発生します。

アドバイスをいただければ幸いです。私はグーグルで、数日間さまざまなことを試してきました。ありがとう!

4

1 に答える 1

2

私はPelle の oauth プラグインを使用し、次のように 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
于 2011-04-14T11:56:05.060 に答える