django - 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
时,它会返回远程经过身份验证的用户。
当我使用ModelBackend
instead进行身份验证时RemoteUserBackend
,用户可以在中间件和视图中使用。
这是故意的吗?如何使远程用户在中间件中可用?Django 版本是 3.1.1
编辑: 找到原因:它与休息框架身份验证有关:在这个 stackoverflow 帖子中,用户@imposeren 指出,
如果您使用的不是 rest_framework.authentication.SessionAuthentication 作为 authentication_class,那么 request.user 设置在中间件之外(在 View.dispatch 期间的某个地方)
有人知道如何在中间件中使用用户吗?
解决方案
推荐阅读
- python - 带有张量流 tf.functions 的 cProfile
- java - 按后退按钮时,我的“视频视图”为空白。我该如何解决?
- python - ImportError:无法从“object_detection.meta_architectures”导入名称“deepmac_meta_arch”
- c++ - “pthread_join”不会在刚刚取消的线程上返回(使用“pthread_cancel”)
- c# - 同一命令上的 Npgsql 二进制导入器和数据读取器
- sql - Spark SQL 不能减少 bigint 数组
- python - 如何在 tkinter python 中停止线程
- javascript - React Router 没有重定向到正确的页面,重定向到的页面是空的。没有错误
- http - 是否可以通过向 localhost 快速发送大量 HTTP 请求来耗尽您的动态端口范围?
- python - 计算源 IP 向目标 IP 发送数据包的次数