使用csrf保护测试sinatra路由

时间:2014-11-19 18:02:20

标签: rspec sinatra rack

我试图测试基本sinatra应用的路由,但由于csrf保护错误导致我的测试请求失败Rack::Csrf::InvalidCsrfToken。 这些路由通常由客户端应用程序命中,该应用程序通过<meta>标记包含csrf令牌。 我尝试通过Rack :: Csrf.token访问csrf令牌,但我无法访问env(或者至少我不知道如何访问{{1}在我的rpsec测试中),并没有经历过成功。

app.rb

env

example_spec.rb

use Rack::Csrf, raise: true

put '/api/events/:id' do
  # ... code that updates an event ...
end

在测试这些路线时,如何规避/安抚Rack:CSRF?

1 个答案:

答案 0 :(得分:2)

通过创建和传递秘密HTTP头变量很容易。 Check the docs

use Rack::Csrf, :skip_if => lambda { |request|
  if settings.development?
      request.env.key?('HTTP_X_VERY_SPECIAL_HEADER')
  else
      false # Don't skip outside of testing
  end
}

put '/api/events/:id' do
    # ... code that updates an event ...
end