我正在尝试访问sinatra中的过滤器中的标头。我的请求包括标题" HTTP_AUTH"但是我无法访问它。我的过滤器是
before do
halt 403 unless request['HTTP_AUTH'] == 'test'
end
它可以从我的机架测试中正常工作。
browser.get '/mypath', "CONTENT_TYPE" => "application/json", "HTTP_AUTH" => 'test'
但是当我从其他来源尝试时,我无法访问它。如果我puts request.env
我可以看到令牌在请求中,但我无法访问它。
"HTTP_CONNECTION"=>"close",
"HTTP_AUTH"=>"test",
"HTTP_ACCEPT"=>"application/json",
我做错了什么?
答案 0 :(得分:28)
我只想补充一点,如果您使用headers
,则不会显示自定义标头。例如,我设置了一个名为X-CSRF-Token的自定义标头,我在每个AJAX请求中发送该标头,并且这个标头不会显示在该哈希中。如果您需要访问自定义标头,可以通过request.env
找到它们,如:
post '/' do
header_token = request.env["HTTP_X_CSRF_TOKEN"]
end
(注意架子如何将X-CSRF-Token更改为HTTP_X_CSRF_TOKEN)
答案 1 :(得分:10)
尝试使用before
方法使用headers
块:
before do
headers "HTTP_AUTH" => "test"
headers "Content-Type" => "text/html; charset=utf-8"
end
或在请求中:
get '/' do
headers['HTTP_AUTH'] = "test"
headers['Cache-Control'] = 'public, max-age=600'
puts headers # show headers on this request
end
使用headers
只是hash