Вам не нужно делать все это самостоятельно. Django имеет функцию authenticate
, которая принимает имя пользователя и пароль и возвращает вам пользователя.
from django.contrib.auth import authenticate
user = authenticate(username='your_username', password='you_password')
Django по умолчанию выполняет аутентификацию с именем пользователя. Если вы хотите использовать электронную почту для этого, вы можете сделать один из них.
- Использовать электронную почту пользователя в качестве его имени пользователя. При этом вам не нужно будет вносить какие-либо изменения в систему аутентификации
- Написать собственный метод аутентификации. Это будет так.
код:
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
class EmailBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
Затем установите этот бэкэнд в качестве вашего аутентификационного бэкенда в настройках:
AUTHENTICATION_BACKENDS = ['path.to.auth.module.EmailBackend']