2009-11-23 2 views
11

http:// 대신 https://을 사용하여 사용자가 웹 사이트에 로그인 할 수있는 옵션을 제공하려면 내보기 또는 템플릿에 들어갈 수있는 옵션을 제공하는 것이 가장 좋습니다.Django - {% url %}을 (를) 생성하는 링크 - 보안 설정 방법은 무엇입니까?

로그인 페이지에서 "보안 연결 사용"링크를 사용하고 싶습니다. 그런 다음 URL을 하드 코딩하지 않고 어떻게합니까?

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

을하고는 http://example.com/loginhttps://example.com/login를 가리있다 : 내가 좋아하는 것

는 할 수 있습니다.

어떻게하면됩니까?

+0

, 사용할 수 있습니다? – Randell

+1

프록시는 포트 80을 통해서만 사용할 수 있기 때문에 (이 수차를 몇 번 볼 수 있음) – Kos

답변

0

url_https 태그를 쓰면 url과 동일한 작업을 수행하지만 URL의 HTTPS 버전을 가리킬 수 있습니다.

6

보안 URL을 많이 사용하지는 않았지만 미들웨어 및 일부 유틸리티가 포함 된 satchmo를 조금 사용해 왔습니다. 미들웨어는 뷰 매개 변수에서 SSL = True 키를 확인하고 요청을 안전하게 저장합니다. 복잡한 작업을 수행 할 필요는 없지만 구현 방법을 살펴볼 수 있습니다.

첫 번째는 원본이지만 두 번째 버전은 어느 시점에서 향상된 버전이어야합니다. 더 이상 그렇지 않을 수도 있습니다. 그들을 들여다 볼 수 있습니다.

당신이

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

특정 URL을 https 전용으로 정의하고 거기에서 미들웨어를 처리하려면 링크 된 스 니펫이 좋은 포괄적 인 솔루션입니다. 당신이하려는 일이 모두 https 링크를 만드는 것이라면 과잉입니다. –

+0

사실 하나의 링크만으로는 가치가 없습니다. 이 경우 솔루션이 더 좋습니다. – googletorp

18

{% url %} 태그에만 URL이 아닌 호스트 부분의 경로 부분을 생성처럼 뭔가를 할 수 있어야 츠모 (Satchmo) 또는 미들웨어 조각 중 하나를 사용하여. "/ path/to/here"와 같은 것만 생성합니다 ("소스보기"만하면 href의 전체 내용을 볼 수 있습니다). 현재 브라우저가 http://example.com 인 경우, 링크는 http://example.com 내에 있어야합니다. 그래서 당신은 템플릿에서 보안 링크를 생성 할 필요는 다음과 같습니다

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

도메인 이름을 하드 코드 싶지 않아 (내가 않을 것이다), 당신은 the Site object를 사용하고 볼 수있는 경우 request.get_host

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

아니면 사이트 프레임 워크를 사용하지 않으려면, 당신은 사용할 수 있습니다 : 뭔가 같은 사용자가 HTTP시 HTTPS를 통해 로그인 할 이유하지만 이상하게도

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

이것은 단점이 있습니다. 언제/또는 사이트를 다른 도메인으로 이동하면 상대 URL이 깨지지 않습니다. http를 https로 바꾸는 옵션이있는 request.build_absolute_uri() 함수와 같은 것을 찾고 있었지만 직접 구현하는 것이 더 낫습니다. – kender

+0

글쎄, https를 강제 실행하고 상대 URL을 사용할 방법이 없습니다. 사이트 프레임 워크를 사용하여 도메인 이름 하드 코딩을 피할 수 있음을 언급하여 편집되었습니다. –

+0

위의 request.get_host 옵션은 기본적으로 request.get_absolute_uri와 동일한 작업을 수행하고 https를 강제 실행합니다. –

관련 문제