代码之家  ›  专栏  ›  技术社区  ›  Jim Jeffries

从Sinatra访问标头

  •  14
  • Jim Jeffries  · 技术社区  · 11 年前

    我正在试图访问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", 
    

    我做错了什么?

    2 回复  |  直到 11 年前
        1
  •  47
  •   Diego Alejandro Molina Leiva    10 年前

    我只是想补充一下,如果你使用 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)

        2
  •  14
  •   Roman Kiselenko    11 年前

    尝试使用 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

    推荐文章