Как передать токен CSRF в данных POST в Django?

Я разрабатываю приложение с бэкэндом Django и интерфейсом Next.js. Я пытаюсь отправить данные POST из интерфейса в бэкэнд с помощью API выборки. У меня проблемы с передачей действительного токена CSRF в моих данных POST в Django.

Я пытаюсь сделать это, включив заголовок X-CSRFToken в свой запрос POST и получив его значение с помощью Библиотека файлов cookie JavaScript рекомендуется в документации по Django .

Вот мой запрос на выборку:

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, конечно же, говорит о том, что файл cookie CSRF не был установлен:

Запрещено (файл cookie CSRF не установлен): / ...

Кто-нибудь может сказать мне, что мне здесь не хватает?


person fredperk    schedule 17.09.2020    source источник
comment
Вы смотрели на это (для серверной части Django) - stackoverflow.com/questions/17716624/django-csrf-cookie-not-set   -  person DaveIdito    schedule 09.10.2020


Ответы (1)


Я решил эту проблему, включив учетные данные в свой запрос:

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));
person fredperk    schedule 09.10.2020