I am trying to access the headers in a filter in sinatra. My request includes the header "HTTP_AUTH", however I can't access it. My filter is
before do
halt 403 unless request['HTTP_AUTH'] == 'test'
end
It works correctly from my rack test.
browser.get '/mypath', "CONTENT_TYPE" => "application/json", "HTTP_AUTH" => 'test'
But when I try from other sources I can't access it. If I puts request.env
I can see the token is in the request, but I can't access it.
"HTTP_CONNECTION"=>"close",
"HTTP_AUTH"=>"test",
"HTTP_ACCEPT"=>"application/json",
What am I doing wrong?
Try use before
block with headers
method:
before do
headers "HTTP_AUTH" => "test"
headers "Content-Type" => "text/html; charset=utf-8"
end
or in request:
get '/' do
headers['HTTP_AUTH'] = "test"
headers['Cache-Control'] = 'public, max-age=600'
puts headers # show headers on this request
end
Use headers
with is just hash
I just wanted to add that if you use headers
it will not show custom headers. For example, I set up a custom header named X-CSRF-Token which I send on every AJAX request, and this one won't show up in that hash. If you need to access custom headers, you will find them through request.env
like:
post '/' do
header_token = request.env["HTTP_X_CSRF_TOKEN"]
end
(Notice how rack changes X-CSRF-Token to HTTP_X_CSRF_TOKEN)