Я создаю веб-приложение с Django (Rest) и шаблонами, приправленными реагирующими компонентами. Эти компоненты реакции подключены к API Django_restframework.
Запросы «GET» работают нормально, но пока мне не удалось заставить работать почтовые запросы. Проблемы, похоже, сосредоточены вокруг:
{detail: "CSRF Failed: CSRF token missing or incorrect."}
Вот шаги, которые я предпринял:
1 - Я включил CSRF_USE_SESSIONS = True
в своем settings.py
2 - Я добавил тег CSRF в свой шаблон django, вот так (я использую django webpack-loader, отсюда и другой тег)
<div id="create_root"></div>
{% render_bundle 'main_create_assessment' 'js' %}
{% csrf_token %}
3 - Я добавил функцию для получения CSRF из файла cookie
function getCookie(name) {
if (!document.cookie) {
return null;
}
const token = document.cookie.split(';')
.map(c => c.trim())
.filter(c => c.startsWith(name + '='));
if (token.length === 0) {
return null;
}
return decodeURIComponent(token[0].split('=')[1]);
}
const csrftoken = getCookie('csrftoken')
console.log(csrftoken)
(Заявления 'console.log' показывают мне, что переменной 'csrftoken' присвоено правильное значение, но почтовые запросы продолжают давать сбой из-за ошибки 403 / отсутствующего / неправильного токена csrf.)
4 - Я добавил информацию csrf в заголовок почтового запроса, например:
fetch(url, {
credentials: 'include',
method: 'POST',
mode: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken
},
body: JSON.stringify({
title: this.state.title
})
})
}
Опять же, мои операторы console.log, похоже, указывают на то, что я предоставляю правильный токен, но ошибка 403 сохраняется. Может ли кто-нибудь просветить меня в том, что я делаю неправильно?