我正在尝试向远程RESTful API发送文件创建请求。
每当我从本地服务器执行此操作时,它都可以正常工作。每当我从iOS设备执行此操作时,它都会因CSRF验证失败而失败。据我所知,这不应该发生,因为它是在两个设备上执行的完全相同的代码...
这是使用PhoneGap / Cordova构建的。 iOS的版本是iOS 11,iOS设备是iPhone 8。
以下是代码:
var mathRandom = Math.random();
var data = {"file": {
"file": base64,
"filename": localStorage.username + mathRandom + ".jpg",
"filepath": "public://" + localStorage.username + mathRandom + ".jpg"
}
};
var result = $.ajax({
type: "POST",
data: data,
url: SITE_URL + "/" + ENDPOINT + '/file.json',
dataType: 'json',
async: false,
error: function (jqXHR, textStatus, errorThrown) {
moduleDebugger('account', errorThrown, "FILE SAVE ERROR");
return 'null';
},
success: function (data, textStatus, jqXHR) {
moduleDebugger('account', data, 'success');
}
});
(是的,我知道它是异步的,但是这段代码绝对必须在它之后的任何事情之前执行 - 我对用户体验的降级很好)
我使用的是同一个用户,当前设置了权限,以便任何人都能够创建文件,甚至匿名(用于测试)。
我的CORS设置如下:
Internal path
Access-Control-Allow-Origin. Use <mirror> to echo back the Origin header.
Access-Control-Allow-Methods
Access-Control-Allow-Headers
Access-Control-Allow-Credentials
*|<mirror>|GET, PUT, POST, DELETE|Content-Type, Authorization, X-CSRF-Token|true
什么会阻止移动用户保存文件,而不是来自localhost的用户?请注意,保存文件的服务器对这两个设备都是远程的。
这是错误消息:
无法加载资源:服务器响应状态为401 (未经授权:CSRF验证失败)
我也收到错误:
无法加载资源:数据网址解码失败
但我不确定它是否与上述错误有关 - 在此错误发生后会出现一段时间。我一直无法确定导致它发生的原因。
编辑:即使是我在localhost上反复测试的静态base64字符串也无法正常工作。