Джанго csrf_cookie_not_set

В настоящее время я работаю над проектом, в котором бэкэнд обрабатывается Django, а интерфейс - ReactJS.

Предыдущие разработчики (они больше не в организации) разработали все API вручную. Я предполагаю, что они не знали о DjangoRestFramework. Моя работа сейчас заключается в REST-ify 50 странных API, которые сейчас работают.

Я использую общие представления DRF (Список, Создать, Получить... и т. Д.).

Я также назначен с задачей реализации DRFSimpleJWT. Предыдущие разработчики закодировали все функции вручную для создания токенов, что они называют custom authentication,

Я начал создавать API, мои API List и Retrieve работают нормально, но всякий раз, когда веб-разработчик делает запрос POST для CreateAPIView, он получил ошибку 403 с описанием csrf cookie not set,

Я также получаю сообщение об ошибке 403 в моем файле журнала runserver.

Я пытался отключить (комментируя) permission_classes и изменив его на AllowAny,

Затем я приступил к отключению authentication_classes или удалитеsession_authentication

В некоторых случаях данные даже не проходят и OPTIONS появляется в моем журнале сервера.

Я проверяю settings.py подать и посмотреть, что csrfmiddleware выключен. Включение этого дает ошибку csrf на всех запросах. Я гуглил и играл с настройками cors и настройками django. Ничего не получалось.

Мой взгляд очень прост:

MyCreateView(generics.CreateAPIView):
queryset = ModelName.objects.all
serializer_class =MySerializer
permission_classes = [IsAuthenticated,]
authentication_classes = [BasicAuthentication, SessionAuthentication,]

Мне нужна помощь, чтобы заставить работать запрос POST. Также, когда я начинаю использовать SimpleJWT, мне нужно указать authentication_classes в моих взглядах? Это связано с корсом?

settings.pyREST_FRAMEWORK такой же, как документация DRF.

Благодарю. Был бы очень признателен за руководство.

1 ответ

Решение

Из внешнего интерфейса при выполнении запросов POST, PATCH, PUT измените заголовок вашего запроса, включив в него "X-CSRFToken". Значение этого заголовка должно быть прочитано из вашего файла cookie с именем "csrftoken".

обратитесь к ним для получения дополнительной информации

https://docs.djangoproject.com/en/2.2/ref/csrf/ https://www.django-rest-framework.org/topics/ajax-csrf-cors/