从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)