Django CSRF Middleware: Почему мой CSRF-токен в запросе отличается от того, который отправлен в заголовке запроса?

Для исходной справочной информации, у меня аналогичная настройка, как в этом посте - пожалуйста, обратите внимание, что это НЕ моя проблема. Моя конфигурация работает, браузер принимает CSRF Set-Cookie из ответа.

CSRF cookie - только http. У меня есть соответствующие настройки CORS.

У меня есть отдельно размещенный SPA, где я в настоящее время тестирую этот поток:

  1. SPA pings the backend server for a CSRF token.
  2. Make a login post request.
  3. Login is denied by 403 on the server due to the CSRF token not matching.

Смотрите мои скриншоты.

Первая часть скриншота показывает, что промежуточное ПО Djangos CSRF нашло в моем запросе токен, начинающийся с 'q1jHW', вторая часть скриншота показывает, что это же промежуточное ПО ожидает, что в запросе будет токен, начинающийся с 'Mrmh9'.

Последняя часть моего скриншота показывает, что запрос на вход, сделанный моим браузером, ДЕЙСТВИТЕЛЬНО содержит CSRF-токен 'Mrmh9' в своих заголовках.

Почему токен моих запросов изменяется бэкендом, а ожидаемый токен не обновляется?

Я полагаю, что проблема может быть связана с тем, КАК я устанавливаю начальный токен:

Я просто использую функцию get_token из django.middleware.csrf и делаю что-то вроде:

response["X-CSRFToken"] = get_token(request)

Я подозреваю, что я могу просто иметь пустое / пустое представление csrf exempt, запросить некоторые статические ресурсы или что-то еще, и промежуточное ПО должно установить токен csrf без того, чтобы я делал это вручную? Или каков будет правильный подход к ручной установке?

Вернуться на верх