从Sinatra访问标题

Jim*_*ies 10 ruby sinatra http-headers

我试图访问sinatra过滤器中的标头.我的请求包括标题"HTTP_AUTH",但我无法访问它.我的过滤器是

before do
    halt 403 unless request['HTTP_AUTH'] == 'test'
end
Run Code Online (Sandbox Code Playgroud)

它从我的机架测试中正常工作.

browser.get '/mypath', "CONTENT_TYPE" => "application/json", "HTTP_AUTH" => 'test'
Run Code Online (Sandbox Code Playgroud)

但是当我从其他来源尝试时,我无法访问它.如果我puts request.env可以看到令牌在请求中,但我无法访问它.

"HTTP_CONNECTION"=>"close", 
"HTTP_AUTH"=>"test", 
"HTTP_ACCEPT"=>"application/json", 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

小智 32

我只是想补充说,如果你使用headers它将不会显示自定义标题.例如,我设置了一个名为X-CSRF-Token的自定义标头,我在每个AJAX请求中发送该标头,并且这个标头不会显示在该哈希中.如果您需要访问自定义标题,您可以通过以下方式找到它们request.env:

post '/' do
  header_token = request.env["HTTP_X_CSRF_TOKEN"]
end
Run Code Online (Sandbox Code Playgroud)

(注意架子如何将X-CSRF-Token更改为HTTP_X_CSRF_TOKEN)

  • 为什么这样做?谢谢你,我想知道我的标题已经消失了 (4认同)

Зел*_*ный 12

尝试使用方法beforeheaders:

before do
  headers "HTTP_AUTH" => "test"
  headers "Content-Type" => "text/html; charset=utf-8"
end
Run Code Online (Sandbox Code Playgroud)

或在请求中:

get '/' do
  headers['HTTP_AUTH'] = "test"
  headers['Cache-Control'] = 'public, max-age=600'
  puts headers # show headers on this request
end
Run Code Online (Sandbox Code Playgroud)

使用headers就是hash

  • 这不会设置标题吗?我正在尝试阅读标题. (3认同)