ruby - 从 Sinatra 访问 header

标签 ruby http-headers sinatra

我正在尝试访问 sinatra 过滤器中的 header 。我的请求包含 header “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 我可以看到 token 在请求中,但我无法访问它。

"HTTP_CONNECTION"=>"close", 
"HTTP_AUTH"=>"test", 
"HTTP_ACCEPT"=>"application/json", 

我做错了什么?

最佳答案

我只想补充一点,如果您使用 headers,它不会显示自定义 header 。例如,我设置了一个名为 X-CSRF-Token 的自定义 header ,我会在每个 AJAX 请求中发送它,而这个 header 不会显示在该哈希中。如果您需要访问自定义 header ,您将通过 request.env 找到它们,例如:

post '/' do
  header_token = request.env["HTTP_X_CSRF_TOKEN"]
end

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

关于ruby - 从 Sinatra 访问 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660827/

相关文章:

ruby - padrino 应用程序包更新 : could not find compatible versions for "tilt"

ruby - Sinatra 日志记录和堆栈跟踪

ruby-on-rails - 我修复了一个失败的 rails 迁移,但为什么这个修复有效?

javascript - React App : EventSource's response has a MIME type ("application/json") that is not "text/event-stream". 中止连接

javascript - "Resource interpreted as script but transferred with MIME type text/html."

ruby - Sinatra Web 管理员(如 Django 管理员)

ruby - 在新的 Sinatra 扩展中集成模型和 View

ruby-on-rails - Resque 可以并行运行作业吗?

ruby-on-rails - bundler /设置(LoadError)

angularjs - Angular $http 将请求发送到 azure 存储