我的phonegap应用与django通信,因此我使用以下文章中描述的方法捕获并发送csrftoken:
https://docs.djangoproject.com/en/1.10/ref/csrf/
这一直在iOS 10.3中运行。 在iOS 10.3中,ajax调用获取除Set-Cookie之外的所有响应头。 我尝试添加xhrFields:{withCredentials:true}和crossDomain:true但它没有区别。
以下是获取csrftoken的请求:
$.ajax({beforeSend: function(xhr) {xhr.withCredentials = true;},
type: "GET",
url: 'url', // the django view has @ensure_csrf_cookie set
xhrFields: {withCredentials: true},
crossDomain: true,
success: function(data, textStatus, xhr) {
// returns null in iOS 10.3
document.cookie = xhr.getResponseHeader("Set-Cookie");
},
});
相同的代码在iOS 10.2中运行良好,我们可以从“Set-Cookie”标题中保存csrftoken供以后使用。
iOS 10.3以某种方式防止这个“Set-Cookie”响应头出现在xhr对象中,因此我们无法从服务器获取csrftoken,并且任何后续的POST操作都将被禁止。
答案 0 :(得分:0)
感谢Selim Arsever的建议,我可以使用第三方Cordova插件来解决这个问题。
步骤:
让django生成一个csrftoken并通过JsonResponse将数据发送到我的应用程序;
使用cookieMaster的setCookieValue将csrftoken设置为域cookie。
然后可以检索csrftoken以在后续的POST调用中发送到django。