Django CSRF Middleware: Почему мой CSRF-токен в запросе отличается от того, который отправлен в заголовке запроса?
Для исходной справочной информации, у меня аналогичная настройка, как в этом посте - пожалуйста, обратите внимание, что это НЕ моя проблема. Моя конфигурация работает, браузер принимает CSRF Set-Cookie из ответа.
CSRF cookie - только http. У меня есть соответствующие настройки CORS.
У меня есть отдельно размещенный SPA, где я в настоящее время тестирую этот поток:
- SPA pings the backend server for a CSRF token.
- Make a login post request.
- 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 без того, чтобы я делал это вручную? Или каков будет правильный подход к ручной установке?