在身份验证中间件之后调用自定义中间件

时间:2018-11-09 13:32:16

标签: django django-rest-framework django-middleware

在django REST框架中,身份验证中间件仅在执行视图中间件之后才在请求中设置用户对象,而在此之前执行任何自定义中间件。在通过身份验证中间件设置用户对象之后,是否可以更改此顺序并执行自定义中间件

作为替代方案,我在中间件本身中创建了用户对象,它可以正常工作,但这只是一个hack。

common.py中定义的中间件是:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'application.middlewares.IPsBlockerMiddlewareHook',
    'application.middlewares.UserMiddleware',
]

有问题的自定义中间件是UserMiddleware。我需要在身份验证后执行它,但事实并非如此

1 个答案:

答案 0 :(得分:3)

中间件在请求到达时以自上而下的顺序执行,而发送响应时则从下至上的顺序执行。您可以在身份验证中间件之后指定自定义中间件,之后它将运行。