Django CSRF 失败:CSRF 令牌丢失或不正确

Isa*_*dor 5 django django-rest-framework django-rest-auth

我正在使用Django Rest Frameworkdjango-rest-auth

我有标准的 API 端点(/login、/logout、/registration...)

使用我的浏览器,我可以登录/列出我的用户/注销。使用 Insomnia(API 请求者),我无法登录/注销,出现错误

“CSRF 失败:CSRF 令牌丢失或不正确”

也许我需要添加 CSRF 标头,但老实说我不知道​​在哪里可以找到这个 CSRF 令牌......也许我需要添加一些东西(@csrf_protect?)到登录端点,但我是否被迫完全重写默认视图?

bas*_*500 13

解决方案

您需要在 Insomnia ( https://support.insomnia.rest/article/49-cookies )的 Header 设置中设置 X-CSRFToken 。

  1. 进入 Insomnia 中的标题设置
  2. 添加新条目 X-CSRFToken
  3. 搜索 vor cookie,点击Request => Cookie
  4. 再次点击 Request => Cookie
  5. 键入csrftoken到Cookie名称
  6. 点击完成

然后再试一次。

如何使用 Django、Rest 和 Insomnia 解决“CSRF 失败:CSRF 令牌丢失或不正确”

解释

CSRF Token 由 Django 在 cookie 中设置。这是在对服务器的第一个请求中完成的。然后将 cookie 的值作为 X-CSRF-Token 发送回标头中的服务器。

您可以在浏览器的调试器中查看正在发生的事情(Chrome 中的 F12)

  1. csrftoken Cookie 已设置 在此处输入图片说明

  2. csrftoken 在请求头中作为 X-CSRF-Token 发送回服务器 在此处输入图片说明