如何将POST数据中的CSRF令牌传递给Django?

问题描述

我正在使用Django后端和Next.js前端开发应用程序。我正在尝试使用访存API将数据从前端发布到后端。 我在将POST数据中的有效CSRF令牌传递给Django时遇到问题。

我正在尝试通过在POST请求中包含X-CSrftoken标头并使用Django JavaScript Cookie Library上推荐的documentation获取其值。

这是我的提取请求:

import Cookies from 'js-cookie';

// POST data
fetch('http://127.0.0.1:8000/dictionary/define',{     
  method: 'POST',headers: {'X-CSrftoken': Cookies.get('csrftoken')},body: JSON.stringify(data)})    
.then(response => response.json())   
.then(data => console.log(data))
.catch(error => console.log(error));

我从Django得到的错误当然是说未设置CSRF cookie:

禁止(未设置CSRF cookie):/...

有人可以告诉我我在这里想念什么吗?

解决方法

我通过在请求中加入凭据来解决了这个问题:

import Cookies from 'js-cookie';

// POST data
fetch('http://127.0.0.1:8000/dictionary/define',{     
  method: 'POST',credentials: 'include',headers: {'X-CSRFToken': Cookies.get('csrftoken')},body: JSON.stringify(data)})    
.then(response => response.json())   
.then(data => console.log(data))
.catch(error => console.log(error));