Я использую 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
?