내 api 용 2-Legged OAuth 공급자를 구축 중입니다. 모든 것이 제대로 연결되어 있고 레일 콘솔에서 서명 된 전화를 걸 수 있습니다. 문제는 OAuth를 controller_spec
에 통합하는 데 문제가 있다는 것입니다. 내 컨트롤러 테스트에서 뭐하는 거지 여기컨트롤러 사양에 서명 된 OAuth 요청을 사용하도록 알릴 수있는 방법
coneybeare $ rails c test
Loading test environment (Rails 3.2.0)
rails test: main
>> consumer = OAuth::Consumer.new("one_key", "MyString", :site => [REDACTED])
# => #<OAuth::Consumer:0x007f9d01252268 @key="one_key", @secret="MyString", @options={:signature_method=>"HMAC-SHA1", :request_token_path=>"/oauth/request_token", :authorize_path=>"/oauth/authorize", :access_token_path=>"/oauth/access_token", :proxy=>nil, :scheme=>:header, :http_method=>:post, :oauth_version=>"1.0", :site=>[REDACTED]}>
ruby: main
>> req = consumer.create_signed_request(:get, "/api/v1/client_applications.json", nil)
# => #<Net::HTTP::Get GET>
ruby: main
>> res = Net::HTTP.start([REDACTED]) {|http| http.request(req) }
# => #<Net::HTTPOK 200 OK readbody=true>
ruby: main
>> puts res.body
{"client_applications":[{"id":119059960,"name":"FooBar1","url":"http://test1.com"},{"id":504489040,"name":"FooBar2","url":"http://test2.com"}]}
# => nil
된다 : 여기
내 서버에 작업 호출의 예입니다require 'oauth/client/action_controller_request'
describe Api::ClientApplicationsController do
include OAuthControllerSpecHelper
…
…
it "assigns all client_applications as @client_applications" do
consumer = OAuth::Consumer.new("one_key", "MyString", :site => [REDACTED])
ActionController::TestRequest.use_oauth=true
@request.configure_oauth(consumer)
@request.apply_oauth!
puts "request.env['Authorization'] = #{@request.env['Authorization']}"
get :index, {:api_version => 'v1', :format => :json}
response.should be_success # Just this for now until I can get authorization, then proper controller testing
end
end
그 시험의 출력 :
request.env['Authorization'] = OAuth oauth_consumer_key="one_key", oauth_nonce="gzAbvBSWyFtIYKfuokMAdu6VnH39EHeXvebbH2qUtE", oauth_signature="juBkJo5K0WLu9mYqHVC3Ar%2FATUs%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1328474800", oauth_version="1.0"
1) Api::ClientApplicationsController GET index assigns all client_applications as @client_applications
Failure/Error: response.should be_success
expected success? to return true, got false
레일에서 해당 서버 호출 로그 :
Processing by Api::ClientApplicationsController#index as JSON
Parameters: {"api_version"=>1}
Rendered text template (0.0ms)
Filter chain halted as #<OAuth::Controllers::ApplicationControllerMethods::Filter:0x007f85a51a8858 @options={:interactive=>false, :strategies=>:two_legged}, @strategies=[:two_legged]> rendered or redirected
Completed 401 Unauthorized in 15ms (Views: 14.1ms | ActiveRecord: 0.0ms)
(0.2ms) ROLLBACK
왜 작동하지 않는지 알 수 없습니다./나는 명백한 실수를하고 있습니까?
소리 투기. 요청 사양으로 사용해 보셨습니까? – apneadiving
컨트롤러 사양입니다. 이 예제는 그 맨손으로 본질적으로 제거되었습니다. 당신이 정확하다면, 그리고 이런 유형의 테스트가 요청 스펙에 들어 있어야한다. 내가 OAuth에 의해 보호받을 때 내 컨트롤러를 테스트 할 다른 방법은 없을까? – coneybeare
요즘 API를 테스트 중이며 컨트롤러 사양에서 헤더에 적절한 값을 전달하기 만하면됩니다. 미안해, 나는 OAuth를 정말로 모른다. 귀하의 경우 두려움은'create_signed_request'가 예상 결과를 얻지 못한다는 것입니다. 디버깅을 시도 했습니까? 그냥 생각 : 당신은 어떤 before_filters' 테스트를 우회 할 수 있습니다 – apneadiving