django_otp定制OTP中间件未检测到已通过身份验证的用户

时间:2018-11-28 13:56:11

标签: django django-middleware

我想使用 django_otp 库添加OTP验证。对于每个请求,我都想验证用户是否已被初始身份验证,在这种情况下,请检查用户是否具有任何OTP设备。

我已经手动实现了用于OTP设备创建的API端点,它成功创建了设备并与用于创建的用户相关联。这是我简化的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',
)

首先AuthenticationMiddlewareuser对象添加到请求中,然后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)

django_otp中的OTPMiddleware添加了user.otp_device attr和user.is_verified()方法。手动添加OTP设备并调用此方法后,它可以正常运行,但在中间件内部 user始终返回AnonymousUser

0 个答案:

没有答案