Невозможно войти в интерфейс администратора 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
Вернуться на верх