我目前正在创建一个与Django Rest框架后端交互的React Native ios应用程序。我通过后端进行身份验证,并将 csrftoken , sessionid 和 messages cookie存储在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和message cookie仍然正确,并且我检查了X-CSRFTOKEN标头是否与csrftoken cookie匹配。我认为csrftoken更改了POST请求,而我发送的XCSRF-TOKEN不正确。但是,如果是这种情况,则GET请求也不起作用。
任何帮助将不胜感激,谢谢。