Django CSRF 令牌存在但仍然出现 403 Forbidden 错误

Django CSRF Token present but still getting 403 Forbidden Error

我正在尝试设置一个 Django API 来接收 POST 带有一些 JSON 数据的请求,并基本上将电子邮件发送到收件人列表。逻辑很简单:

如您所见,我根据 Django 文档将 X-CSRFToken 添加到 headers 中,这是我通过 get_token() 方法生成的。但是,API 中的响应是 403 禁止状态 CSRF 令牌未设置

我已经检查了请求中的 headers 并且令牌确实存在。此外,我一直在提供通往 API 的其他路线,并且我一直在将其用于 AJAX 调用,这同样非常简单,只需遵循 Django 文档即可,它们工作得非常好。

当我从视图中进行调用时,问题似乎出现了,AJAX 调用由 Javascript 静态文件处理,正如我所说,它们工作正常。

我认为 Django 不允许在同一页面上使用 2 个 CSRF 令牌(一个用于提交表单,另一个在 get_token() 的视图中),但事实并非如此问题。 这通常是我得到的错误:

>>> Forbidden (CSRF cookie not set.): /_api/send-notification/
>>> "POST /_api/send-notification/ HTTP/1.1" 403 2864

我已经阅读了几个关于 SO 的类似问题,但它们大多涉及使用 csrf_exempt 装饰器,在我看来这并不是真正的解决方案。它只是完全摆脱了 CRSF 令牌的有用性。

有谁知道可能导致此问题的原因是什么? 谢谢

错误试图告诉您需要像这样将令牌添加到 cookie 存储中:

cookies = {'csrftoken': csrf_token}
requests.post(var["BASE_URL"] + "_api/send-notification/", json=data, headers=headers, cookies=cookies)