首页 > 解决方案 > 使用 Django 管理应用程序并禁用会话中间件?

问题描述

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

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

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

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.

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

标签: djangodjango-rest-frameworkdjango-rest-authdjango-sessionsdjango-rest-framework-jwt

解决方案


推荐阅读