Джанго 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.py
REST_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/