ruby-on-rails - Rails 功能测试和 OAuth 参数问题

标签 ruby-on-rails oauth

我一直在为 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>'

我假设这与查询参数编码不正确或 header 格式不正确有关。任何帮助(甚至指向有效示例的指针)将不胜感激。

我还应该指出,我尝试测试的相关应用程序是一个 2 足 OAuth 提供商。因此,应用程序只是解析签名并检查消费者 key / secret 是否 checkout 。

最佳答案

此时这可能对解决最初的问题没有帮助,但可能会节省一些时间。

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

关于ruby-on-rails - Rails 功能测试和 OAuth 参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823563/

相关文章:

ruby-on-rails - 如何为截屏视频 #228 中 Ryan Bates 的助手编写 RSpec 测试?

c# - dnx451 RC1 InMemorySymmetricSecurityKey 发生了什么?

ruby-on-rails - 如何使用连接表的 bool 列使 Rails/ActiveRecord 返回唯一对象

sql - 对数组中存储的数据进行搜查(运算符不存在 : integer[] = integer)

java - 从 GitHub 获取 OAuth 访问 token 时出现 Cookie 错误

mobile - Google API OAuth 2.0 Titanium : Required parameter is missing: response_type

facebook - 如何将访问 token 从一个网站传递到另一个网站?

http - 多个 HTTP 授权 header ?

ruby-on-rails - 经济拒绝 : Connection Refused localhost:11211 - Dalli/Memcachier/Heroku

javascript - ArticlesController#show 中的 ActiveRecord::RecordNotFound