2010-12-01 2 views
2

나는 django.contrib.auth.views.login and.logout보기를 사용하고 있습니다. 매우 편리하고 즉시 작동하여 AAA + 등을 다시 배포합니다.장고 내장 로그인보기 및 오류

문제는 내가 별도의 로그인 페이지를 사용하지 않기 때문에 발생하지만 사용자가 로그인하지 않는 한 모든 페이지에 로그인 상자가 있습니다. , 당연하지). 따라서 사용자 이름/비밀번호 조합이 잘못되었을 때 오류가 발생합니다. 이 세 가지 경로 중에서 선택해야하는 것은 무엇입니까?

  • 성공시뿐만 아니라 오류시 다음으로 리디렉션하는 비밀 방법이 있습니다. 그렇다면 말해주십시오!
  • 중간에 장고의 메시지 시스템을 사용하여 내 자신의 로그인보기를 작성하십시오.
  • 로그인 페이지를 작성합니다 (글쎄, 템플릿이 누락되었습니다). 장고 인증 시스템의 완전한 기능을 활용할 수 있습니다. 가능한 해결책 (첫 번째 목록에 세 번째 선택 +)의
+0

어떤 오류가 발생합니까? –

+0

'registration/login.html' 템플릿이 없다는 에러 메시지가 나타납니다. – Agos

답변

3

하나는 :

당신은 특별한 로그인 페이지를 제공해야
  1. (즉, 정의 registration/login.html입니다) 및 사용자의 비 loged 각 정상 페이지가있다 로그인 양식;
  2. 경우 정상적으로 사용자 로그인 (이 django.contrib.auth.views.login에서 처리 로직) : 일반 페이지
    • : 그녀가 loged 곳에서 페이지로 사용자를 리디렉션;
    • 로그인 페이지의 경우 : next 매개 변수가 있으면 거기로 리디렉션하고, 그렇지 않으면 기본 페이지로 리디렉션합니다.
  3. 사용자가 로그인하지 못한 경우 : 제공된 오류가있는 로그인 페이지를 리디렉션 (또는 다시 그립니다.
  4. 사용자가 로그인 한 경우 : 일반 페이지는 로그 아웃 링크를 제공합니다 (사용자가 다른 계정을 통해 다시 로그인하거나 로그인하려는 경우 특수 페이지가 계속 표시됩니다).

정상적인 페이지에서 로그인 양식은 <input type="hidden" name="next" value="{{ request.path }}" />과 같아야합니다. 프로젝트 설정에서

: 거의 동일하지만 POST 요청에 대해서만 로그 아웃 않습니다

# in settings.py 
LOGIN_URL = '/login'  # this should coinside with url pattern of login view 
LOGOUT_URL = '/logout' # same but for logout view 
LOGIN_REDIRECT_URL = '/' # url to main page 

N.B는 : 내가 대신 내 자신을 사용 장고의 buildin 로그 아웃 뷰를 사용하지 마십시오. 이로 인해 사용자는 <img src='my_site/logout' /> 악성 코드로 로그 아웃 할 수 없습니다.

+0

매우 철저한 대답에 감사드립니다. 이제 로그인 페이지 템플릿을 제공 하겠지만 다른 질문이 있습니다. 독립 실행 형 로그인 페이지에서 다른 위치에서 실패한 로그인으로 인해 거기에 도착한 경우에만 다음 매개 변수가 설정됩니다. 'request.post.next'를 통해 접근 했지, 그렇지? 마지막 질문 : 로그인 오류가 어떻게 전달됩니까? 양식에 오류로 전달 되었습니까? – Agos

+0

또한 : 나는 이미 다음에'request.path'를 포함하는 것을 돌 보았습니다.하지만 악의적 인 코드에 대해 감사드립니다! – Agos

+0

아니요, 사용자는 독립 실행 형 로그인 페이지에 착륙하여 정상적인 경우에도 '다음'을 가질 수 있습니다. 예를 들어 'my_site/login? next = $ {다른 일부 페이지 경로}'와 같은 로그인 링크를 제공 할 수 있습니다. 'django.contrib.auth.views.login' 뷰는이 경우를 처리하고 + 템플릿에'next' 변수를 제공합니다. 오류가 양식 객체의 오류 필드로 전달되었습니다. – user461342