我试图测试基本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?
答案 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