В настоящее время я создаю приложение 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 также не будут работать.
Любая помощь будет принята с благодарностью, Спасибо.