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エラーが表示されます。
本当にありがとうございます。私はグーグルで何度も何かを試してきました。ありがとう!
、今私はそれを考え出しただけ掲示した後。同様のボートにいる可能性のある他の人に利益をもたらすために、TumblrのOAuth実装では、oauth_verifierキーがあなたが提供するOAuthコールバックに渡すことを期待しています。したがって、@access_token = @ request_token.get_access_tokenのコードを@access_token = @ request_token.get_access_token({:oauth_verifier => params [:oauth_verifier]})に変更する必要があります。 –
うわー、これは私を助けました。 Tumblrは、この正確な問題を理解しようと数時間を無駄にしたので、APIページでこれを言及する必要があります。 – dreadpirateryan