Rails OAuth API から request_token を取得しようとすると、次のようになります。
Started POST "/oauth/request_token" for 127.0.0.1 at 2012-04-18 13:09:18 +0300
Processing by OauthController#request_token as */*
Rendered text template (0.0ms)
Filter chain halted as #<OAuth::Controllers::ApplicationControllerMethods::Filter:0x00000001c82d68 @options={:interactive=>false, :strategies=>:two_legged}, @strategies=[:two_legged]> rendered or redirected
Completed 401 Unauthorized in 26ms (Views: 25.1ms | ActiveRecord: 0.0ms)
次の宝石を使用:
- oauth 0.4.5
- oauth2 0.5.2
- oauth-プラグイン 0.4.0
この API は Rails 3.0 では問題なく動作していましたが、Rails 3.2 に移行してすべての gem を更新すると動作しなくなりました。何がうまくいかないのだろうか。
request_token を取得する方法は次のとおりです。
consumer2 = OAuth::Consumer.new("kwqAtXlMn5hhpmL1AnaDb2L9qXwI6qK4dgiWcKAh", "H51lKIleX4IymCdbdkWLO5ooPM3SWVTjtnhiqhGz", :site => "http://localhost:3000")
url = "http://localhost:3000/callback"
request_token = consumer2.get_request_token(:oauth_callback => url)
キーがチェックされ、正しい。
ここに oauth_controller.rb があります (これは request_token を付与する責任があると思いますか?)
require 'oauth/controllers/provider_controller'
class OauthController < ApplicationController
include OAuth::Controllers::ProviderController
def login_required
authenticate_user!
end
protected
# Override this to match your authorization page form
# It currently expects a checkbox called authorize
# def user_authorizes_token?
# params[:authorize] == '1'
# end
# should authenticate and return a user if valid password.
# This example should work with most Authlogic or Devise. Uncomment it
def authenticate_user(username,password)
user = User.find_by_email params[:username]
if user && user.valid_password?(params[:password])
user
else
nil
end
end
end
更新: Oauth-plugin gem を少し掘り下げましたが、問題は次の場所にあると思います。
provider_controller.rb:
module ProviderController
def self.included(controller)
controller.class_eval do
before_filter :login_required, :only => [:authorize,:revoke]
oauthenticate :only => [:test_request]
oauthenticate :strategies => :token, :interactive => false, :only => [:invalidate,:capabilities]
oauthenticate :strategies => :two_legged, :interactive => false, :only => [:request_token]
oauthenticate :strategies => :oauth10_request_token, :interactive => false, :only => [:access_token]
skip_before_filter :verify_authenticity_token, :only=>[:request_token, :access_token, :invalidate, :test_request, :token]
end
end
request_token を要求するときに、何らかの理由で認証が失敗します。これを修正する賢い方法は何でしょうか。