【问题标题】:Accessing headers from Sinatra从 Sinatra 访问标头
【发布时间】:2016-02-29 06:34:37
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: ruby http-headers sinatra


    【解决方案1】:

    我只是想补充一点,如果您使用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】:

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

    【讨论】:

    • 这不会设置标题吗?我正在尝试阅读标题。
    • 在没有参数的情况下读取headers 方法完成了这项工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多