2010-06-23 14 views
5

देता है मैं http_referer को सहेजने की कोशिश कर रहा हूं ताकि मैं लॉग इन करने के बाद उपयोगकर्ता को उस यूआरएल पर वापस भेज सकूं। अभी मेरे पास मेरे नियंत्रकों में पहले_फिल्टर है अगर उन्हें एक redirect_to के माध्यम से कोई सत्र नहीं बनाया गया है तो उन्हें पृष्ठ में लॉग इन भेजता है। हालांकि जब मैं HTTP_REFERER की जांच करता हूं तो यह शून्य होता है (जबकि 'REQUEST_URI' वापस आता है जहां मैं मूल रूप से आ रहा हूं)।रेल पर रूबी - request.env ['HTTP_REFERER'] शून्य

धन्यवाद।

उत्तर

11

HTTP_REFERER ब्राउज़र द्वारा सेट किया गया एक HTTP शीर्षलेख है जिसमें पिछले वेब पेज का पता है जिसमें से वर्तमान में अनुरोध किए गए पृष्ठ का लिंक अनुसरण किया गया था। सेट नहीं किया जाएगा जब सीधे किसी पृष्ठ पर नेविगेट किया जाए।

REQUEST_URI (request.request_uri() के माध्यम से भी उपलब्ध है) यूनिफ़ॉर्म रिसोर्स पहचानकर्ता रेल नियंत्रक/कार्रवाई पहुँचने के लिए उपयोग और हमेशा सेट किया जाना चाहिए है।

फेंक आपके विचार में इस डिबगिंग कोड:

<ul> 
<% request.env.each do |item| %> 
    <li><%= item[0] %> : <%= item[1] %></li> 
<% end %> 
</ul> 

HTTP_REFERER सेट नहीं है, सुनिश्चित करें कि आप एक लिंक के माध्यम से उस पृष्ठ पर नेविगेट कर रहे हैं कर सकते हैं या पुन: निर्देशित और अगर यह तो सेट कर दिया जाता है देखते हैं।

यह भी संभावना है कि आपका ब्राउज़र not setting HTTP_REFERER शीर्षलेख है। सुनिश्चित करें कि आपके पास इस पर कोई ऐड-ऑन प्रभावित नहीं है। हेडर भेजे जाने के लिए आप Tamper Data नामक एक निफ्टी फ़ायरफ़ॉक्स ऐड-ऑन का उपयोग कर सकते हैं।

+0

हाँ, यह प्रदर्शित नहीं करता है, हालांकि, कोड आप मुझे दिया पता चलता है कि अनुरोध अपने आंतरिक फ़ायरवॉल जो सबसे अधिक संभावना डेटा है कि मैं जरूरत है .... कोड के लिए धन्यवाद फ़िल्टर कर रही है के माध्यम से चला जाता है! – Naujpr

+0

@Naujpr: मैंने Tamper डेटा के लिंक को शामिल करने के लिए अपना उत्तर अपडेट किया है, जो आपको समस्या का समाधान करने में मदद कर सकता है। सौभाग्य! – Awgy

5

इससे कोई फर्क नहीं पड़ता कि आप किस समाधान के साथ आते हैं, आपको रिक्त रेफरर केस को संभालने में सक्षम होना चाहिए, क्योंकि क्लाइंट के पास यह विकल्प है कि इसे निर्दिष्ट करना है या नहीं। (उदाहरण के लिए जब आप सफारी की निजी ब्राउज़िंग और क्रोम के गुप्त मोड में हैं)

रेल में आप redirect_to :back का उपयोग कर सकते हैं, जो HTTP_REFERER का उपयोग करेगा, या अन्यथा त्रुटि उत्पन्न करेगा।

रीडायरेक्ट_to: बैक का उपयोग करते समय, यदि कोई रेफरर नहीं है, तो RedirectBackError उठाया जाएगा। RedirectBackError को सहेजकर आप इस मामले के लिए कुछ फ़ॉलबैक व्यवहार निर्दिष्ट कर सकते हैं।

संबंधित मुद्दे