2011-07-25 2 views
2

레일 기능 테스트에서 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 공급자라는 점도 지적해야합니다. 따라서 앱은 서명을 파싱하고 소비자 키/비밀번호가 체크 아웃되는지 확인합니다.

+0

params의 순서가 잘못되었을 때 문제가있었습니다. 아마도 도움이 될 수 있습니다. 던노. – lzap

+0

예, 아마 그런 경우입니다. 나는 그것을 할 수있는 "적절한"방법의 예를보고 싶다. – stuffinq2010

+0

2-legged oauthenticated 컨트롤러에서 작동하는 사양을 얻었습니까? – coneybeare

답변

4

아마도 초기 문제는 도움이되지 않지만 누군가 저장하는 데는 몇 분이 걸릴 수 있습니다.

문제는 해시가 기호와 문자열 키가 혼합되어 있으면 해시에 대한 정렬 방법이 작동하지 않는다는 것입니다. Oauth는 문자열에 의해 입력 된 일부 항목을 params 해시에 추가합니다.