2009-11-23 9 views
11

यदि मैं के बजाय https:// का उपयोग कर किसी वेबसाइट पर लॉग इन करने का विकल्प देना चाहता हूं, तो मैं उन्हें अपने दृश्य या टेम्पलेट में जाने का विकल्प देना चाहता हूं।Django - {% url%} के साथ उत्पन्न लिंक - उन्हें सुरक्षित कैसे बनाएं?

मैं अपने लॉगिन पेज पर "सुरक्षित कनेक्शन का उपयोग करें" लिंक चाहता हूं - लेकिन फिर, मैं URL को हार्डकोड किए बिना इसे कैसे कर सकता हूं?

मैं चाहता सक्षम होने के लिए सिर्फ करना है:

{% url login_page %} 
{% url login_page_https %} 

और उन्हें http://example.com/login और https://example.com/login को इंगित किया है।

मैं यह कैसे कर सकता हूं?

+0

मजे की बात है, हालांकि, क्यों किसी भी उपयोगकर्ता के लिए एक http जब https के माध्यम से प्रवेश करना चाहते हैं उपलब्ध है? – Randell

+1

क्योंकि उनके प्रॉक्सी केवल पोर्ट 80 के माध्यम से (इस विचलन को कुछ बार देखा जाता है) – Kos

उत्तर

0

शायद आप url_https टैग लिख सकते हैं जो url जैसा ही है लेकिन यूआरएल के HTTPS संस्करण को इंगित करता है।

6

मैंने सुरक्षित यूआरएल के साथ बहुत कुछ नहीं किया है, लेकिन मैंने सैचमो के साथ थोड़ा सा काम किया है, जिसमें इसके लिए मिडलवेयर और कुछ यूटिल हैं। मिडलवेयर सिर्फ दृश्य पैरामीटर में कुंजी SSL = True के लिए जांचता है, और अनुरोध को इस तरह से सुरक्षित बनाता है। आपको शायद इसे जटिल बनाने की आवश्यकता नहीं है, लेकिन आप इसे देख सकते हैं कि यह कैसे कार्यान्वित किया गया है।

  • http://www.djangosnippets.org/snippets/85/
  • http://www.djangosnippets.org/snippets/240/
  • :

    Satchmo पर bitbucked है here

    मैं भी middlewares जो भी आप एक सुरक्षित लॉगिन यूआरएल प्राप्त करने में मदद करने के लिए सक्षम होना चाहिए के लिए एक के टुकड़े को खोजने के लिए कर रहा था

पहला मूल है, जबकि दूसरा किसी भी समय संस्करण में सुधार हुआ संस्करण होना चाहिए, लेकिन अब मामला नहीं हो सकता है। आप उन्हें देख सकते हैं।

या तो Satchmo या मध्यस्थ के टुकड़े में से एक का उपयोग करके आप की तरह

{% url login_page %} 
{% url login_page SSL=1 %} 
+0

लिंक किए गए स्निपेट एक अच्छे व्यापक समाधान हैं यदि आप कुछ यूआरएल को केवल https के रूप में परिभाषित करना चाहते हैं और फिर वहां से मिडलवेयर इसका ख्याल रखता है। यदि आप जो भी करने की कोशिश कर रहे हैं, वे एक https लिंक बनाते हैं तो वे अधिक हो जाते हैं। –

+0

सच है, अकेले एक लिंक के लिए यह इसके लायक नहीं है। उस स्थिति में आपका समाधान बेहतर है। – googletorp

18

{% url %} टैग केवल यूआरएल, नहीं मेजबान भाग के रास्ते भाग उत्पन्न करता है कुछ करने के लिए सक्षम होना चाहिए। यह केवल "/ path/to/here" जैसे कुछ उत्पन्न करता है (आपको केवल "स्रोत देखें" की आवश्यकता है और आप देखेंगे कि यह href की संपूर्ण सामग्री है)। यह आपका ब्राउज़र है जो मानता है कि आप वर्तमान में http://example.com पर हैं, लिंक http://example.com के भीतर भी होना चाहिए। इसलिए सभी आप अपने टेम्पलेट में सुरक्षित लिंक उत्पन्न करने के लिए क्या करने की जरूरत है:

<a href="https://example.com{% url blah %}"> 

आप डोमेन नाम हार्डकोड नहीं करना चाहते हैं (और मैं नहीं होगा), तो आपको the Site object उपयोग करें और यह देखने के लिए हो सकता है, तो कुछ की तरह:

<a href="https://{{ site.domain }}{% url blah %}"> 

या आप साइटों ढांचे का उपयोग नहीं करना चाहते हैं, तो आप उपयोग कर सकते हैं request.get_host:

<a href="https://{{ request.get_host }}{% url blah %}"> 
+0

हालांकि इसमें 1 नुकसान है; जब/यदि मैं साइट को अलग डोमेन पर ले जाता हूं, या ऐसा कुछ, सापेक्ष यूआरएल नहीं तोड़ेंगे, यह एक होगा। मैं http. https के साथ http को प्रतिस्थापित करने के विकल्प के साथ request.build_absolute_uri() फ़ंक्शन जैसे कुछ और ढूंढ रहा था, लेकिन मुझे लगता है कि इसे स्वयं लागू करना बेहतर है। – kender

+0

ठीक है, https को मजबूर करने और रिश्तेदार यूआरएल का उपयोग करने का कोई तरीका नहीं है। उल्लेख करने के लिए संपादित किया गया है कि आप डोमेन नाम हार्डकोडिंग से बचने के लिए साइट फ्रेमवर्क का उपयोग कर सकते हैं। –

+0

request.get_host का उपयोग कर उपरोक्त विकल्प अनिवार्य रूप से request.get_absolute_uri और https को मजबूर करने जैसा ही काम कर रहा है। –

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