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

时间:2015-05-05 08:55:12

标签: python django django-rest-framework django-authentication http-token-authentication

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

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

如果有人有此问题的解决方案,请发帖回答?

提前致谢。

2 个答案:

答案 0 :(得分:3)

在我的情况下,我编写了自定义中间件来处理这种情况。 1.当我使用API​​登录时,api路径为**/api/accounts/login**。因此,当请求出现在此URL时,我将删除sessionid和csrftoken。

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

在我的情况下,可以使用以上两种删除情况。

感谢大家的帮助。!!

答案 1 :(得分:0)

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

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

文档在RemoteUserMiddleware的背景下描述了这种方法。