【发布时间】:2016-03-17 13:52:19
【问题描述】:
我的 Ionic 应用程序与 Django API 服务器后端有一个有趣的问题。
在我的应用程序的以前版本 (0.0.1-.0.0.5) 中,这还没有出现,但从现在开始,我无法发出 POST 请求来获取我的身份验证令牌。
在我部署的服务器上使用本地 Ionic ionic serve,当我尝试登录时,我的服务器注册一个 OPTIONS /token-auth/,然后是 POST /token-auth/。根据服务器日志,当我在我的设备ionic run android 上运行应用程序并尝试登录时,服务器只注册了 OPTIONS 请求但不注册 POST。
我发现这是由于 CORS,它首先发出 OPTIONS 以查看允许发出的内容。由于某种原因,OPTIONS 请求完全没有返回。在我的其他 Django Rest Framework 项目中,OPTIONS 得到了正确的响应。我认为这是相关的,但奇怪的是它从本地主机到部署的服务器,OPTIONS 请求响应相同。
我的登录功能非常基本:
$http({
method: 'POST',
url: config.apiUrl + 'token-auth/',
data: {
"username": usernameElement[0].value,
"password": passwordElement[0].value
}
}).then(function(data) {
console.log('success', data);
...
}, function(err) {
console.log('error', err);
...
});
我发现有趣的另一件事是它运行错误函数,但我没有在err 变量中返回一个正常的错误对象,而是返回似乎是请求对象的东西。我以前从未见过。
{
"data":null,
"status":0,
"config":{
"method":"POST","transformRequest":[null],
"transformResponse":[null],
"url":"http://example.com/api/token-auth/",
"data":{
"username":"myuser",
"password":"mypassword"
},
"headers":{
"Accept":"application/json, text/plain, */*",
"Content-Type":"application/json;charset=utf-8"}
},
"statusText":""
}
- 在已部署的服务器上运行良好的本地应用程序
- 设备应用到部署的服务器没有注册 POST 请求,只有 OPTIONS
- AJAX 错误返回是请求对象,不是错误响应对象
我已经被困在这个问题上几天了,正在寻找任何想法。
【问题讨论】:
-
您是否将网址添加到白名单? docs.ionic.io/docs/cordova-whitelist
-
@cDima 嘿,是的,cordova 白名单已启用