Я хочу добавить подтверждение OTP с помощью библиотеки django_otp .Для каждого запроса я хочу проверить, был ли пользователь первоначально аутентифицирован, и в этом случае проверить, не связано ли с ним какое-либо устройство OTP.
Я вручную реализовал конечную точку API для создания устройства OTP, и он успешно создает устройство и связывается с пользователем, использованным для создания.Это мой упрощенный стек MIDDLEWARE
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'oauth2_provider.middleware.OAuth2TokenMiddleware',
'otp.middleware.FMSOTPMiddleware',
)
Сначала AuthenticationMiddleware
добавит объект user
к запросу, а затем OAuth2TokenMiddleware
будет authenticate () пользователя противбэкэнд
Код для промежуточного программного обеспечения FMSOTPMiddleware
:
class FMSOTPMiddleware(OTPMiddleware):
def process_request(self, request, *args, **kwargs):
super().process_request(request, *args, **kwargs)
user = request.user
print(user)
print(user.is_authenticated)
OTPMiddleware
из django_otp добавляет методы user.otp_device
attr и user.is_verified()
.После добавления устройства OTP вручную и вызова этих методов оно работает правильно, но из промежуточного программного обеспечения user
всегда возвращает AnonymousUser
.