2014-09-04 9 views
5

से हेडर तक पहुंचने से मैं सीनात्रा में एक फ़िल्टर में हेडर तक पहुंचने की कोशिश कर रहा हूं। मेरे अनुरोध में हेडर "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", 

मैं क्या गलत कर रहा हूं?

उत्तर

8

कोशिश उपयोग 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

+2

इस हेडर सेट नहीं चाहेंगे? मैं हेडर पढ़ने की कोशिश कर रहा हूं। –

+1

@JimJeffries आप 'हेडर' सेट कर सकते हैं और 'हेडर' पढ़ सकते हैं। –

+1

बिना किसी तर्क के 'हेडर' विधि को पढ़ना नौकरी करता था। धन्यवाद। –

17

मैं सिर्फ जोड़ना चाहते थे यह है कि अगर आप headers का उपयोग यह कस्टम हेडर नहीं दिखाएगा। उदाहरण के लिए, मैंने एक्स-सीएसआरएफ-टोकन नामक कस्टम हेडर सेट किया है जिसे मैं प्रत्येक AJAX अनुरोध पर भेजता हूं, और यह उस हैश में दिखाई नहीं देगा। आप कस्टम हेडर का उपयोग करने की जरूरत है, तो आप उन्हें request.env तरह के माध्यम से मिलेगा:

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

(गौर करें कि रैक परिवर्तन एक्स CSRF-टोकन HTTP_X_CSRF_TOKEN करने के लिए)

+2

ऐसा क्यों करता है? इसके लिए धन्यवाद मैं सोच रहा था कि मेरे हेडर कहाँ गए थे –