Во-первых, я знаю, что есть много вопросов относительно токенов CSRF / Django, но я не нашел ни одного, который был бы полезен для сценария, в котором я нахожусь.
Я пытаюсь использовать Django Встроенные конечные точки сброса пароля с интерфейсом React. Моя цель - использовать бэкэнд-функциональность (создание токенов, ответов по электронной почте и т. Д. c) при отображении соответствующих форм через React вместо использования шаблонов Django. Внешний и внутренний интерфейсы размещены на двух уникальных серверах.
В своем коде внешнего интерфейса я вызываю конечную точку password_reset
, когда мой компонент React монтируется для получения токена CSRF.
componentDidMount() {
let url = "http://(raw ip address)/accounts/password_reset/"
fetch(url, {
credentials: 'include',
})
}
Токен в заголовках ответа получен как
Set-Cookie: csrftoken=b...e; expires=Sun, 10 Jan 2021 21:50:20 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Здесь начинаются мои проблемы - я не могу проверить токен в своем хранилище tab и значение токена отсутствуют в document.cookie
. В идеале я хотел бы использовать что-то вроде getCookie
метода, продемонстрированного в Django документах
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
Но это предполагает, что значение токена правильно хранится в document.cookie
.
Все мои соответствующие настройки Django являются значениями по умолчанию, хотя я перебрал допустимые значения для CSRF_COOKIE_SAMESITE
и CSRF_USE_SESSIONS
безрезультатно.
В качестве еще одного примечания, если я сделаю запрос POST
после монтирования компонента, токен будет успешно установлен в запросе - но мне нужно добавить токен в теле для аутентификации по умолчанию Django просмотров!
Любые предложения или идеи будут с благодарностью!
Ян