Django的默认身份验证适用于username和password字段。电子邮件身份验证后端将根据email和对用户进行身份验证password。
from django.contrib.auth import get_user_model class EmailBackend(object): """ Custom Email Backend to perform authentication via email """ def authenticate(self, username=None, password=None): user_model = get_user_model() try: user = user_model.objects.get(email=username) if user.check_password(password): # check valid password return user # return user to be authenticated except user_model.DoesNotExist: # no matching user exists return None def get_user(self, user_id): user_model = get_user_model() try: return user_model.objects.get(pk=user_id) except user_model.DoesNotExist: return None
将此身份验证后端添加到AUTHENTICATION_BACKENDS设置中。
# settings.py AUTHENTICATION_BACKENDS = ( 'my_app.backends.EmailBackend', ... )