如何在 Django 中使用中间件同时处理基于会话和令牌的身份验证?

How to handle session and token based authentication simultaneously using middle ware in django?

我想在我的应用程序中同时使用令牌和基于会话的身份验证,优先级为令牌。我创建了两个具有相同 URL 的门户,一个使用会话,另一个使用令牌。因此,当会话在 cookie 中可用时,基于令牌的请求将失败并显示 "CSRF Token is missing" 错误消息。

我想到的一个解决方案是使用中间件,我可以优先考虑 token。如果两者都在请求中可用,那么自定义中间件将删除与会话相关的内容并仅保留与令牌相关的信息并继续。

如果有人对此问题有解决方案,请post回答?

提前致谢。

Django 中间件根据 MIDDLEWARE_CLASSES 元组顺序执行。

您需要确保基于令牌的身份验证中间件位于 MIDDLEWARE_CLASSES 中的 AuthenticationMiddleware 之后。

文档在 RemoteUserMiddleware 的上下文中描述了这种方法。

就我而言,我编写了自定义中间件来处理这种情况。 1. 当我使用 API 和 api 登录时,路径是 **/api/accounts/login**。因此,当此 url 收到请求时,我将同时删除 sessionid 和 csrftoken。

HTTP_AUTHORIZATION 在请求中可用时,我删除 sessioncsrftoken.

使用以上两种删除情况,我的情况就可以处理了。

感谢大家的帮助!!