레일 기능 테스트에서 OAuth로 서명 된 요청을 사용하는 데 문제가 있습니다.레일 기능 테스트 및 OAuth 매개 변수 문제
나는 도움을 주시면 감사하겠습니다.
나는 oauth gem (0.4.5)에있는 ActionController :: TestRequest 오버라이드로 작업하려고합니다.
이미 아무 소용이 솔루션을 시도 것가 : http://d.hatena.ne.jp/falkenhagen/20091110/1257830144
이 내가 지금 뭘하는지는 ...
require 'oauth/client/action_controller_request'
나는 로그인을 수행하는 방법을 만들었습니다되는 내 OauthConsumer 개체 (ActiveRecord)와 URL 문자열 매개 변수 (쿼리 문자열) 중 하나를 전달할 수 있습니다.
params = { :store => 'foo' }
_do_oauth(oauth_consumers(:one), params) # currently not working for passing params
get :index, { :format => :json }.merge(params)
을하지만 요청이 "PARAMS"를 선택하거나 적절하게 인코딩처럼은 보이지 않는다 :
def _do_oauth(consumer, params = {})
c=OAuth::Consumer.new(consumer.consumer_key, consumer.consumer_secret)
t=OAuth::AccessToken.new(c)
ActionController::TestRequest.use_oauth=true
@request.configure_oauth(c, t, params)
end
내 테스트 케이스에과 같이 호출.
내가 (위의 "수"라인에서 발생하는)되어지고있어 오류 : 나는 그것을 쿼리와 함께 할 수있는 뭔가 제대로 인코딩되지 PARAMS, 또는 헤더의 있으리라 믿고있어
ArgumentError: comparison of Array with Array failed
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/helper.rb:37:in `sort'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/helper.rb:37:in `normalize'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/request_proxy/base.rb:98:in `normalized_parameters'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/request_proxy/base.rb:113:in `signature_base_string'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/signature/base.rb:77:in `signature_base_string'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/signature/hmac/base.rb:12:in `digest'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/signature/base.rb:65:in `signature'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/signature.rb:23:in `sign'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/client/helper.rb:45:in `signature'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/client/helper.rb:75:in `header'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/client/action_controller_request.rb:54:in `set_oauth_header'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/client/action_controller_request.rb:50:in `apply_oauth!'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/oauth-0.4.5/lib/oauth/client/action_controller_request.rb:14:in `process_with_new_base_test'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.7/lib/action_controller/test_case.rb:412:in `process'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.7/lib/action_controller/test_case.rb:47:in `process'
/home/sp/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.7/lib/action_controller/test_case.rb:350:in `get'
test/functional/deals_controller_test.rb:56:in `block in <class:DealsControllerTest>'
을 형식이 올바르지 않습니다. 어떤 도움 (또는 심지어 작동하는 예제에 대한 포인터)은 크게 감사 할 것입니다.
내가 테스트하려고하는 앱이 2 다리의 OAuth 공급자라는 점도 지적해야합니다. 따라서 앱은 서명을 파싱하고 소비자 키/비밀번호가 체크 아웃되는지 확인합니다.
params의 순서가 잘못되었을 때 문제가있었습니다. 아마도 도움이 될 수 있습니다. 던노. – lzap
예, 아마 그런 경우입니다. 나는 그것을 할 수있는 "적절한"방법의 예를보고 싶다. – stuffinq2010
2-legged oauthenticated 컨트롤러에서 작동하는 사양을 얻었습니까? – coneybeare