我的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带来了适当的响应。我认为这是相关的,但奇怪的是它从localhost到部署的服务器工作,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":""
}
我已经坚持了几天,我正在寻找任何想法。
答案 0 :(得分:1)
这实际上是一个CORS问题。通过django-cors-headers调试后,我发现它没有通过CORS。我后来发现,而不是在http://192.168.1上提供服务。 36 :8100由于某种原因离子切换到http://192.168.1。 10 :8100 < / p>