2011-01-12 10 views
10

OAuth-Rubyを使用してTumblrアプリケーションでOAuth認証を行っています。私は、OAuthのさまざまなステップを経て進行するコードを書くことができますが、アクセストークンを取得することも、実際にリクエストすることもできません。リクエストキーを取得し、ユーザをTumblrにリダイレクトして認証してアクセスを許可し、認証されたリクエストキーを受け取ることができます。しかし、私はそれ以上には得ることができません。OAuth-RubyとTumblr API(Rails 3)でアクセストークンを取得する

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コールバックはコントローラで次のコードを実行します。ステップ3で

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 

が、問題があります。私は実際にラインでアクセストークンを取得するように見えることはできません。

@access_token = @request_token.get_access_token 

誰かが私がアクセストークンを取得するために何をする必要があるかを教えてもらえますか?その行を実行すると、OAuth :: Unauthorizedエラーが表示されます。

本当にありがとうございます。私はグーグルで何度も何かを試してきました。ありがとう!

+3

、今私はそれを考え出しただけ掲示した後。同様のボートにいる可能性のある他の人に利益をもたらすために、TumblrのOAuth実装では、oauth_verifierキーがあなたが提供するOAuthコールバックに渡すことを期待しています。したがって、@access_token = @ request_token.get_access_tokenのコードを@access_token = @ request_token.get_access_token({:oauth_verifier => params [:oauth_verifier]})に変更する必要があります。 –

+0

うわー、これは私を助けました。 Tumblrは、この正確な問題を理解しようと数時間を無駄にしたので、APIページでこれを言及する必要があります。 – dreadpirateryan

答えて

2

私は​​を使用して、それは少し、このよう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 
+1

これは止まり、応答しません。あなたのコードがあなたのために働くことを確認できますか? – defhlt

関連する問題