2014-09-04 26 views
5

Tôi đang cố gắng truy cập các tiêu đề trong bộ lọc trong sinatra. Yêu cầu của tôi bao gồm tiêu đề "HTTP_AUTH", tuy nhiên tôi không thể truy cập nó. Bộ lọc của tôi làTruy cập các tiêu đề từ Sinatra

before do 
    halt 403 unless request['HTTP_AUTH'] == 'test' 
end 

Nó hoạt động chính xác từ thử nghiệm giá của tôi.

browser.get '/mypath', "CONTENT_TYPE" => "application/json", "HTTP_AUTH" => 'test' 

Nhưng khi tôi thử từ các nguồn khác, tôi không thể truy cập. Nếu tôi puts request.env Tôi có thể thấy mã thông báo có trong yêu cầu, nhưng tôi không thể truy cập nó.

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

Tôi đang làm gì sai?

Trả lời

8

sử dụng Thử before khối với headers phương pháp:

before do 
    headers "HTTP_AUTH" => "test" 
    headers "Content-Type" => "text/html; charset=utf-8" 
end 

hoặc yêu cầu:

get '/' do 
    headers['HTTP_AUTH'] = "test" 
    headers['Cache-Control'] = 'public, max-age=600' 
    puts headers # show headers on this request 
end 

Sử dụng headers với chỉ hash

+2

có điều này không phải thiết lập các tiêu đề? Tôi đang cố gắng đọc các tiêu đề. –

+1

@JimJeffries bạn có thể đặt 'tiêu đề' và đọc' tiêu đề'. –

+1

đọc phương thức 'tiêu đề' không có đối số đã thực hiện công việc. Cảm ơn. –

17

Tôi chỉ muốn nói thêm rằng nếu bạn sử dụng headers nó sẽ không hiển thị tiêu đề tùy chỉnh. Ví dụ, tôi thiết lập một tiêu đề tùy chỉnh có tên là X-CSRF-Token mà tôi gửi trên mỗi yêu cầu AJAX, và điều này sẽ không hiển thị trong băm đó. Nếu bạn cần truy cập vào tiêu đề tùy chỉnh, bạn sẽ tìm thấy chúng thông qua request.env như:

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

(Chú ý cách thay đổi giá X-CSRF-Mã để HTTP_X_CSRF_TOKEN)

+2

Tại sao lại thực hiện điều đó? Cảm ơn vì điều này tôi đã tự hỏi nơi các tiêu đề của tôi đã biến mất –

Các vấn đề liên quan