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
Что я сделал
- Установленные необходимые пакеты:
pip install django-otp django-two-factor-auth
- Обновлено значение 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', ... ]
- Настроено Middleware в settings.py:
MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django_otp.middleware.OTPMiddleware', 'two_factor.middleware.threadlocals.ThreadLocals', ... ]
- Исправление сайта администратора в 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')), ... ]
- Настройки 2FA в settings.py:
TWO_FACTOR_PATCH_ADMIN = True TWO_FACTOR_LOGIN_URL = 'two_factor:login' LOGIN_REDIRECT_URL = '/admin/' LOGIN_URL = 'two_factor:login'
- Добавлены устройства 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? Может быть, я что-то упускаю в своей настройке? Любые рекомендации или предложения будут очень признательны.