2016-01-07 6 views
5

मैंने Django को 1.8 से 1.9 तक अपग्रेड किया। इसके बाद, मुझे Django व्यवस्थापक लॉगिन के बाद यह लोकलहोस्ट पर यह त्रुटि मिलती है:सीएसआरएफ सत्यापन विफल - मेजबान सुरक्षित है, जबकि रेफरर असुरक्षित है

Referer checking failed - Referer is insecure while host is secure

सब कुछ उत्पादन में ठीक काम करता है।

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 
SESSION_COOKIE_SECURE = True 
CSRF_COOKIE_SECURE = True 
+0

मुझे लगता है कि आप विकास में 'http' का उपयोग कर रहे हैं। तो ऐप को आपके 'local.py' (या समान) में' http' का उपयोग करने के लिए कॉन्फ़िगर किया जाना चाहिए। – sobolevn

उत्तर

2

अपने settings.py फाइल में उन लाइनों उत्पादन पर ठीक है क्योंकि आप एक SSL प्रमाणपत्र अपने डोमेन से जुड़े का उपयोग कर रहे हैं: नीचे मेरी settings.py फ़ाइल का एक टुकड़ा है। हालांकि, स्थानीय पर आप शायद http://localhost:8000 या कुछ इसी तरह का उपयोग कर रहे हैं। यदि आप https://localhost:{{YOUR_PORT_NUMBER}} के माध्यम से कनेक्ट करने का प्रयास करते हैं तो आपको ERR_SSL_PROTOCOL_ERROR जैसी त्रुटि मिल जाएगी।

यह समस्या django/django/middleware/csrf.py के 167-168 लाइनों में है। जब आप उत्पादन पर https का उपयोग कर रहे हैं, request.is_secure()True लौटा रहा है ... जिसके लिए HTTP_REFERER भी सत्य है या आपको जिस त्रुटि का संदर्भ दिया गया है उसे आपको मिलेगा।

एक समाधान adjust your settings.py file depending on whether you're in your local or production environment होगा। इस तरह आप उन तीन पंक्तियों को settings_production.py फ़ाइल में जोड़ सकते हैं जो अन्य सेटिंग्स आयात करता है जो स्थानीयहोस्ट और आपके उत्पादन सर्वर दोनों के लिए आम हैं। आपका लोकहोस्ट सेटिंग्स के एक अलग सेट का उपयोग करेगा जिसमें उन पंक्तियों को शामिल नहीं किया गया है।

+0

हां। मुझे आपका बिंदु पता है। उन पंक्तियों से पहले मैंने अपने प्रश्न में निर्दिष्ट किया है, इस स्थिति में 'अगर पर्यावरण नहीं है ==' लोकलहोस्ट '। मतलब है कि मैंने अपने प्रश्न में निर्दिष्ट लाइनों को केवल उत्पादन में निष्पादित किया है। तो इस त्रुटि को रोकने के लिए मुझे अपनी सेटिंग्स में क्या जोड़ना है? – Farcorn

+0

बस जांचने के लिए, यदि आप उन तीन पंक्तियों को पूरी तरह हटा देते हैं तो साइट 'लोकलहोस्ट' पर काम करती है? तब क्या त्रुटि होती है? मुद्दा यह है कि आपका 'HTTP_REFERER' मेटा टैग 'localhost' पर' https' का उपयोग नहीं कर रहा है। लाइनों के 167-168 देखें ['django/django/middleware/csrf.py'] (https://github.com/django/django/blob/master/django/middleware/csrf.py) – YPCrumble

+0

मुझे अभी भी मिलता है वही त्रुटि जब मैं उन तीन पंक्तियों पर टिप्पणी करता हूं। – Farcorn

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