Django Admin Site Not Enforcing Two-Factor Authentication (2FA) with django-otp and django-two-factor-auth

Описание проблемы:

Я пытаюсь применить двухфакторную аутентификацию (2FA) для администратора сайта Django, используя пакеты django-otp и django-two-factor-auth. Несмотря на все шаги по настройке, вход в админку не требует 2FA и позволяет пользователям входить в систему, используя только имя пользователя и пароль.

Моя установка

  • Версия Django: 4.2.11
  • django-otp Версия: 1.5.2
  • django-two-factor-auth Версия: 1.17.0
  • Python Версия: 3.10

Что я сделал

  1. Установленные необходимые пакеты: pip install django-otp django-two-factor-auth
  2. Обновлено значение INSTALLED_APPS в файле settings.py: INSTALLED_APPS = [ 'django.contrib.contenttypes', 'django.contrib.auth', 'django.contrib.sessions', 'django.contrib.admin', 'django_otp', 'django_otp.plugins.otp_email', 'two_factor', 'two_factor.plugins.email', ... ]
  3. Настроено Middleware в settings.py: MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django_otp.middleware.OTPMiddleware', 'two_factor.middleware.threadlocals.ThreadLocals', ... ]
  4. Исправление сайта администратора в urls.py: from django.contrib import admin from two_factor.admin import AdminSiteOTPRequired admin.site.__class__ = AdminSiteOTPRequired urlpatterns = [ path('admin/', admin.site.urls), path('account/', include(('two_factor.urls', 'two_factor'), namespace='two_factor')), ... ]
  5. Настройки 2FA в settings.py: TWO_FACTOR_PATCH_ADMIN = True TWO_FACTOR_LOGIN_URL = 'two_factor:login' LOGIN_REDIRECT_URL = '/admin/' LOGIN_URL = 'two_factor:login'
  6. Добавлены устройства 2FA: Я добавил устройство электронной почты с помощью команды управления two_factor_add.

Вопрос

Даже после выполнения этих шагов страница входа в систему администратора не запрашивает 2FA. Она позволяет мне напрямую войти в систему, используя только имя пользователя и пароль, полностью обходя требование 2FA.

Ошибки в журналах

Вот некоторые соответствующие записи журнала при попытке войти в систему: [22/Aug/2024 16:24:34] INFO "GET /admin/login/?next=/admin/ HTTP/1.1" 302 0 [22/Aug/2024 16:24:35] INFO Response for URL: /account/account/login/, Status Code: 200, User: Anonymous, IP: 127.0.0.1

Что я пробовал:

  • Убедитесь, что django_otp.middleware.OTPMiddleware правильно размещен в списке промежуточного ПО.
  • Перезапуск сервера Django после каждого изменения конфигурации.

Что может заставить администратора Django обойти требование 2FA? Может быть, я что-то упускаю в своей настройке? Любые рекомендации или предложения будут очень признательны.

Вернуться на верх