Невозможно войти в интерфейс администратора django с моим пользовательским бэкендом
Я заменил стандартную систему бэкенда на свою собственную
#overriding authentication method to use email instead of an username.
class EmailBackend(ModelBackend):
def authenticate(self, request, email = None, password = None):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=email)
except UserModel.DoesNotExist:
return None
if user.check_password(password):
return user
return None
и отредактировал settings.py
в соответствии с документацией
AUTH_USER_MODEL = "accounts.User"
AUTHENTICATION_BACKENDS = ["accounts.backends.EmailBackend"]
User
сама модель
class User(AbstractUser):
email = models.EmailField(max_length=64, unique=True)
courses = models.ManyToManyField(Course, blank=True)
Проблема в том, что я могу войти в систему с помощью электронной почты в моей html-форме входа, но не могу сделать то же самое в интерфейсе администратора django.
Что я пробовал до сих пор:
- Удаление папки migrations с самой базой данных и последующее выполнение миграций и переходов
- Перезапуск сервера
- Создание нового суперпользователя
Итак, я понял, что мне просто нужно добавить аргумент kwargs
, чтобы функция принимала дополнительные аргументы.
Исправленная версия кода выглядит так:
class EmailBackend(ModelBackend):
def authenticate(self, request, 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