Пользовательское промежуточное ПО OTP django_otp не обнаруживает уже аутентифицированного пользователя - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу добавить подтверждение 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.

...