首页 > 解决方案 > Django rest 框架:远程用户在中间件中不可用 - 仅在视图中

问题描述

我正在使用 django 远程用户中间件和自己的中间件mysupermiddleware

MIDDLEWARE = [    
    ...,
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.RemoteUserMiddleware',
    'my_project.middleware.mysupermiddleware',
]

当远程用户进行身份验证时,它在视图中可用。request.user显示用户名。

但在我的中间件中,它不可用

def mysupermiddleware(get_response):

    def middleware(request):
        print (request.user)

request.user返回AnonymousUser

当我在视图中打印request.user时,它会返回远程经过身份验证的用户。

当我使用ModelBackendinstead进行身份验证时RemoteUserBackend,用户可以在中间件和视图中使用。

这是故意的吗?如何使远程用户在中间件中可用?Django 版本是 3.1.1

编辑: 找到原因:它与休息框架身份验证有关:在这个 stackoverflow 帖子中,用户@imposeren 指出,

如果您使用的不是 rest_framework.authentication.SessionAuthentication 作为 authentication_class,那么 request.user 设置在中间件之外(在 View.dispatch 期间的某个地方)

有人知道如何在中间件中使用用户吗?

标签: djangodjango-rest-frameworkdjango-authentication

解决方案


推荐阅读