2

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

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

如果有人对此问题有可用的解决方案,请在答案中发布?

提前致谢。

4

2 回答 2

3

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

HTTP_AUTHORIZATION在请求中可用时,我删除会话csrftoken

在我的情况下可以处理使用上述两种移除情况。

感谢大家的帮助。!!

于 2015-05-05T12:43:45.203 回答
0

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

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

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

于 2015-05-05T09:04:41.400 回答