Среда отдыха Django, включающая заголовок «X-CSRFTOKEN», получающий «CSRF Failed: токен CSRF отсутствует или неверен» - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я создаю приложение IOS, в котором я взаимодействую с бэкэндом django rest framework.Я аутентифицируюсь с помощью бэкэнда и сохраняю csrftoken , sessionid и сообщения куки в asyncStorage.

У меня есть бэкэнд-представление

class ItemList(generics.ListCreateAPIView):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer
    permission_classes = (IsAuthenticated,)

Пример запроса GET:

axios({
    url:'https://myapi.com/api/items/',
    method: "GET",
    withCredentials: true,
    headers: {
     Cookie: mycookies,
}),...

Пример запроса POST:

axios({
    url:'https://myapi.com/api/items/',
    method: "POST",
    withCredentials: true,
    headers: {
     Cookie: mycookies,
     'X-CSRFTOKEN': cookies.csrftoken.value
}),...

ПРИМЕЧАНИЕ. Mycookies - это полная строка файлов cookie, в то время какcookie - это объект javascript.Это не опечатка.

Вскоре после аутентификации работают и запросы GET, и POST.Я могу получать и создавать предметы из API.Однако, если я закрою приложение Ios и снова открою, запрос POST перестанет работать.Запрос GET вернет ответ 200, но запрос POST вернет ошибку аутентификации 403 с сообщением «Ошибка CSRF: токен CSRF отсутствует или неверен».

Когда я отправляю запрос POST, я уверен, что csrftoken, sessionidи сообщения cookie по-прежнему правильны, и я проверил, что заголовок X-CSRFTOKEN совпадает с файлом cookie csrftoken.Я думаю, что csrftoken меняется для запросов POST, и отправляемый XCSRF-TOKEN неверен.Однако, если бы это было так, запросы GET также не будут работать.

Любая помощь будет принята с благодарностью, Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...