Django CSRF Failed: токен CSRF отсутствует или неверен - PullRequest
1 голос
/ 25 апреля 2019

Я использую Django Rest Framework, а также django-rest-auth.

У меня есть стандартные конечные точки API (/ login, / logout, /registration...)

С помощью моего браузера я могу войти / составить список своих пользователей / выйти из системы. С Insomnia (запросчик API) я не могу войти / выйти, у меня ошибка

«CSRF Failed: токен CSRF отсутствует или неверен»

Может быть, мне нужно добавить заголовок CSRF, но, честно говоря, я не знаю, где найти этот токен CSRF ... Может быть, мне нужно добавить некоторые вещи (@csrf_protect?) Для входа в конечную точку, но я вынужден полностью переписать вид по умолчанию?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

В дополнение к ответу @ basti500.

Использование X-CSRFTOKEN вместо X-CSRFToken работает по умолчанию с Django CSRF_HEADER_NAME, HTTP_X_CSRFTOKEN.

То есть:

  1. Перейти на вкладку «Заголовок» в бессоннице
  2. Добавить новую запись X-CSRFTOKEN
  3. Поиск по cookie, нажмите Request => Cookie
  4. Снова нажмите на Request => Cookie
  5. Введите csrftoken в Cookie Имя
  6. Нажмите Готово

Обязательно проверьте, установлен ли CSRF_HEADER_NAME в настройках Django.py

0 голосов
/ 28 апреля 2019

Решение

Вам необходимо установить X-CSRFToken в настройках заголовка бессонницы (https://support.insomnia.rest/article/49-cookies).

  1. Перейти к настройкам заголовка в бессоннице
  2. Добавить новую запись X-CSRFToken
  3. Поиск vor cookie, нажать Request => Cookie
  4. Нажмите еще раз на Request => Cookie
  5. Введите csrftoken в Имя файла cookie
  6. Нажмите Готово

и попробуйте снова.

How to solve

Объяснение

Токен CSRF устанавливается Django в файле cookie.Это делается в рамках первого запроса к серверу.Затем значение куки отправляется обратно на сервер в заголовке как X-CSRF-Token.

Вы можете увидеть, что происходит в отладчике вашего браузера (F12 в Chrome)

  1. Установлен файл cookie csrftoken enter image description here

  2. csrftoken отправляется обратно как X-CSRF-Token на сервер в заголовке запроса enter image description here

...