Использование Django REST Framework с CSRF на основе сессий - PullRequest
0 голосов
/ 23 сентября 2018

Я использую Django + Django REST Framework в среде, где я не могу использовать токены CSRF на основе файлов cookie;поэтому я должен работать с CSRF_USE_SESSIONS = True.

Однако веб-интерфейс DRF зависит от этого файла cookie для всех взаимодействий.Похоже, это устанавливается путем чтения файла cookie csrftoken и установки заголовка X-CSRFToken для последующего запроса, который затем используется django.middleware.csrf.CsrfViewMiddleware.process_view(), если скрытое поле не включено в тело запроса.Это установлено в этом коде из rest_framework.templates.rest_framework.base.html:

<script>
  window.drf = {
    csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}",
    csrfCookieName: "{{ csrf_cookie_name|default:'csrftoken' }}"
  };
</script>

Формы DRF, которые не используют POST, содержат токен CSRF в теле формы, поэтому отсутствие cookie означает, что веб-интерфейс неиметь доступ к токену CSRF вообще, вызывая сбой всех PUT, PATCH и DELETE запросов с ответом 403.

I считаю это ошибка вDRF, но возможно это и есть намеренное поведение.Может кто-нибудь объяснить, как DRF предназначен для использования с CSRF_USE_SESSIONS = True?

...