繁体   English   中英

Rails功能测试和OAuth参数问题

[英]Rails Functional Tests and OAuth Parameter problem

我一直在努力解决在Rails功能测试中使用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参数(用于查询字符串)传递给该方法。

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 = { :store => 'foo' }
_do_oauth(oauth_consumers(:one), params) # currently not working for passing params
get :index, { :format => :json }.merge(params)

但是看起来请求似乎没有接受“参数”或正确编码。

我得到的错误是(发生在上面的“ get”行上):

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提供程序。 因此,该应用只是解析签名并检查消费者密钥/秘密签出。

目前,这可能无法解决最初的问题,但可以节省一些时间。

问题是,如果散列包含符号和字符串键的混合,则散列的排序方法会出错。 Oauth将一些由字符串键入的条目添加到params哈希中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM