使用 Django 管理应用程序并禁用会话中间件?

Jul*_*Sam 5 django django-sessions django-rest-framework django-rest-auth django-rest-framework-jwt

我正在为 API 构建一个 Django 服务器,该 API 依赖于 JWT(或基于令牌的 - https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication)为我们的用户进行身份验证。

我不需要出于任何目的进行基于会话的身份验证。它会在每个请求上创建不必要的查询,并且当我不想对用户进行身份验证时也会对用户进行身份验证(我希望浏览器仅在请求中包含 Authentication 标头时进行身份验证,否则保留 AnnonymousUser。这是因为它会产生问题在我的一些中间件中,我验证我是否正在与访客或经过身份验证的用户打交道)。

然而,当我尝试使用管理应用程序时,问题就出现了(我无法想象在不使用 django 管理页面的情况下构建这个应用程序)。当我从设置文件中删除与会话相关的中间件:( django.contrib.sessions.middleware.SessionMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware and django.contrib.messages.middleware.MessageMiddleware) 时,在执行 runserver 时出现以下错误:

ERRORS:
?: (admin.E408) 'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MIDDLEWARE in order to use the admin application.
?: (admin.E409) 'django.contrib.messages.middleware.MessageMiddleware' must be in MIDDLEWARE in order to use the admin application.
?: (admin.E410) 'django.contrib.sessions.middleware.SessionMiddleware' must be in MIDDLEWARE in order to use the admin application.
Run Code Online (Sandbox Code Playgroud)

有人可以想出一种解决方法,我可以在 Django 中禁用会话,同时还可以使用管理面板吗?我想到的一个解决方案是破解添加授权标头到每个管理页面请求,但是1)我不知道如何继续这个想法,2)(更重要的是),我无法在禁用会话中间件时执行运行服务器。