2009-11-23 25 views
11

Kullanıcıların http:// yerine https:// kullanarak bir web sitesinde oturum açabilmeleri için bir seçenek vermek istersem, onlara benim görüşüme veya şablonuma ulaşmak için bir seçenek sunarım.Django - {% url%} ile oluşturulan bağlantılar - nasıl güvenli hale getirilir?

Giriş sayfamdaki "Güvenli bağlantı kullan" bağlantısına sahip olmak istiyorum ancak daha sonra URL'yi kod yazmadan nasıl yapabilirim?

Sadece şunu yapmak isterim:

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

ve http://example.com/login ve https://example.com/login noktalarını göstermelerini istiyorum.

Bunu nasıl yapabilirim?

+0

, gecerli? – Randell

+1

Vekilleri yalnızca bağlantı noktası 80'e izin verdiğinden (bu sapmayı birkaç kez gördükten) – Kos

cevap

0

Belki de url ile aynı şeyi yapan ancak URL'nin HTTPS sürümüne işaret eden url_https etiketini yazabilirsiniz.

6

Ben güvenli adresler ile çok çalıştık değil, ama ara katman ve bunun için biraz utils'i vardır Satchmo ile biraz çalıştık. Middleware sadece görünüm parametrelerinde SSL = True anahtarını kontrol eder ve talebi bu şekilde güvenli hale getirir. Muhtemelen bu kadar karmaşık yapmanıza gerek yok, ancak nasıl uygulandığına bir göz atabilirsiniz.

Birincisi orjinaldir, ikincisi ab sürümü geliştirilmiş olmalıdır, bir noktada, ama artık durum böyle olmayabilir. Onlara bir göz atabilirsin.

Eğer

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

Bağlantılı snippet'ler, belirli URL'leri yalnızca https olarak tanımlamak ve daha sonra bir orta yazılımın oradan ilgilenmesini istiyorsanız iyi bir çözümdür. Tüm yapmaya çalıştığınız şey bir https bağlantısı oluşturması gerektiğidir. –

+0

Doğru, tek başına bir bağlantı için buna değmez. Bu durumda çözümün daha iyi. – googletorp

18

{% url %} etiketi yalnızca URL'yi değil, konak kısmı yolunu kısmını oluşturur böyle bir şey yapmak mümkün olmalıdır Satchmo'yu veya ara katman snippet'lerden birini ya kullanma. Sadece "/ path/to/here" gibi bir şey üretir (yapmanız gereken tek şey "kaynağı görüntüle" dir) ve bunun href'un tüm içeriği olduğunu göreceksiniz. Şu anda http://example.com adresinde olduğunuzu varsayan tarayıcınızın da bağlantıyı http://example.com içinde olması gerekir. Dolayısıyla bunu şablonunda güvenli bir bağlantı oluşturmak için yapmanız gereken tek şey:

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

Alan adını hardcode istemiyorum (ve olmaz) kullanarak, the Site object kullanmak ve onu bakmak olabilir varsa request.get_host

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

Yoksa siteleri çerçeve kullanmak istemiyorsanız, kullanabilirsiniz: bir şey gibi herhangi bir kullanıcı bir http zaman https üzerinden giriş yapmak istemesi için olsa İlginç

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

Bunun bir dezavantajı var; siteyi farklı bir alana taşıdığımda veya böyle bir şeyle karşılaşırsam, göreceli URL'ler kırılamayacaksa, bu gerçekleşir. http ile https değiştirmek için isteğe bağlı request.build_absolute_uri() işlevi gibi bir şey arıyordum, ama sanırım bunu kendi başıma uygulamak daha iyi. – kender

+0

Eh, https zorlamak ve göreli bir URL kullanmak için bir yolu yoktur. Alan adını kodlamaktan kaçınmak için Siteler çerçevesini kullanabileceğinizi belirtmek üzere düzenlenmiştir. –

+0

request.get_host kullanarak yukarıdaki seçenek aslında request.get_absolute_uri ve https zorlama ile aynı şeyi yapıyor. –

İlgili konular