2014-09-26 4 views
0

방금 ​​장고 지침서를 작성했으며 사용자가 이메일 주소와 비밀번호로 로그인해야하는 웹 사이트를 만들고 싶습니다. 이것은 Django의 멋진 내장 관리 사이트와는 완전히 별개입니다 (한두 명의 특수 사용자 만 Admin에 액세스 할 수 있어야합니다).Django 사용자 로그인 이메일 및 비밀번호

내 질문은 :

  1. 가 나는 등 사용자 자격 증명, 정보를 저장하기 위해 별도의 데이터베이스 테이블을 만들어야합니까? 아니면 기존의 장고 테이블을 사용해야합니까?

  2. 언급 한 바와 같이 사용자는 이메일 주소로 로그인해야합니다. 이것이 장고의 문제일까요?

기타 모범 사례에 크게 감사하겠습니다. 고맙습니다.

+0

사용자 이름과 이메일 주소를 기반으로 사용자를 인증 달성하는 데 도움이 될 것입니다 방법을 여기 읽을 수 있습니다 사용자 이름 : http://stackoverflow.com/a/16638473/821594 – stalk

답변

0

브랜든 맞아,이 작업을 수행하는 가장 간단한 방법 대신 장고의 기본의 백엔드를 정의하는 것입니다 의 당신의 settings.py에서이 를하자 :

AUTHENTICATION_BACKENDS = ('accounts.backend.EmailOrUsernameModelBackend') 
계정/backend.py에서 다음

:

from django.contrib.auth import get_user_model 
from django.contrib.auth.backends import ModelBackend as _ModelBackend 

User = get_user_model() 


class EmailOrUsernameModelBackend(_ModelBackend): 
    """ Authenticate user by username or email """ 

    def authenticate(self, username=None, password=None): 
     if '@' in username: 
      kwargs = {'email': username} 
     else: 
      kwargs = {'username': username} 
     try: 
      user = User.objects.get(**kwargs) 
      if user.check_password(password): 
       return user 
      else: 
       return None 
     except User.DoesNotExist: 
      return None 

    def get_user(self, user_id=None): 
     try: 
      return User.objects.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 

이제 사용자 이름 또는 이메일 로 로그인 할 수 있습니다 재미

01 되세요
1

먼저 미들웨어는 무엇입니까 장고의 입력 또는 출력을 전역 적으로 변경하기위한 저수준의 "플러그인"시스템입니다.

그리고 당신은 이메일 백엔드 middleware 만들기 activating-middleware

당신이 당신은 이메일 등으로 사용자 정의 사용자를 만들 수 있습니다

def authenticate(self, username=None, password=None): 
     try: 
      user = User.objects.get(email=username) 
      if user.check_password(password): 
       return user 
     except User.DoesNotExist: 
      return None 
관련 문제