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",
私は何が間違っているのですか?
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
with is just hash
を使用します
headers
を使用すると、カスタムヘッダーが表示されないことを追加したかっただけです。たとえば、すべてのAJAXリクエストで送信するX-CSRF-Tokenという名前のカスタムヘッダーを設定しましたが、これはそのハッシュに表示されません。カスタムにアクセスする必要がある場合ヘッダーは、次のようにrequest.env
で見つけることができます。
post '/' do
header_token = request.env["HTTP_X_CSRF_TOKEN"]
end
(ラックがX-CSRF-TokenをHTTP_X_CSRF_TOKENに変更する方法に注意してください)