从Sinatra访问标头
我试图访问sinatrafilter中的标头。 我的请求包括标题“HTTP_AUTH”,但我无法访问它。 我的filter是
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",
我究竟做错了什么?
before
使用headers
方法的块before
尝试使用:
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
我只是想补充说,如果你使用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)