Как зарегистрировать пользователя с помощью электронной почты или имени пользователя в пользовательской пользовательской модели django
Это мой текущий код, может ли кто-нибудь добавить необходимый код, чтобы позволить пользователю войти в систему с помощью электронной почты или имени пользователя
backends.py
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend, UserModel
class CaseInsensitiveModelBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
UserModel = get_user_model()
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
try:
case_insensitive_username_field = '{}__iexact'.format(UserModel.USERNAME_FIELD)
user = UserModel._default_manager.get(**{case_insensitive_username_field: username})
except UserModel.DoesNotExist:
UserModel().set_password(password)
else:
if user.check_password(password) and self.user_can_authenticate(user):
return user
Вы можете сделать ModelBackend
, который будет сосредоточен на извлечении UserModel
, где совпадает USERNAME_FIELD
, или поле email
совпадает с __iexact
поиска [Django-doc].
from django.contrib.auth import get_user_model
def authenticate(self, request, username=None, password=None, **kwargs):
UserModel = get_user_model()
user_field = UserModel.USERNAME_FIELD
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
try:
case_insensitive_username_field = '{}__iexact'.format(UserModel.USERNAME_FIELD)
user = UserModel._default_manager.get(
Q((f'{user_field}__iexact', username)) | Q(username__iexact=username)
)
except UserModel.DoesNotExist:
UserModel().set_password(password)
else:
if user.check_password(password) and self.user_can_authenticate(user):
return user