构建和运行离子应用程序时,我遇到了一个非常奇怪的问题。我从服务器调用Login API,它在浏览器中运行良好,当以
运行时$ionic serve --lab
但是当在Android中安装应用程序时,它会出现403错误,并且不会提供有关错误代码的任何其他信息,可能,我不知道如何在Android混合应用程序中获取浏览器控制台日志。
我的登录功能如下
login: function(user) {
var deferred = $q.defer();
$http.post(SERVER_URL + '/auth/login', {
username: user.username,
password: user.password
}).success(function(response, status, headers, config) {
if (response.data && response.data[0]) {
Auth.setToken(response.data[0].token);
Auth.setUserId(response.data[0].id);
deferred.resolve(response);
} else {
deferred.reject(response);
}
}).error(function(response, status, headers, config) {
deferred.reject(response);
});
return deferred.promise;
}
但是,所有get请求都能正常工作。
答案 0 :(得分:2)
我最近碰到了这个问题,我无法从我在iPhone上运行的应用程序或模拟器上发送任何东西而没有收到403,但它确实直接从任何浏览器工作,包括我手机上的那个和使用Postman-chrome插件。
这似乎是来自Ionic应用程序的任何POST请求的问题:它将Origin
标题发送为file://
。使用Play Framework 2.4后端,我必须完全禁用CORSFilter
(从application.conf中删除play.http.filters
才能使用它。我将进一步调查,稍后可能会提供更多细节。
X-Requested-With
& Content-Type
标头设置,<allow-navigation href="*"\>
,没有任何效果。 答案 1 :(得分:1)
访问元素为您的应用提供对其他域上资源的访问权限,它允许您的应用从外部域加载可以接管整个网络视图的网页。只需在config.xml
中添加它
<access origin="*" subdomains="true"/>
答案 2 :(得分:1)
当我以
运行app时,它有效$ionic run --livereload android
答案 3 :(得分:1)
当Play Framework 2.4后端时,我和@BatteryAcid有同样的问题。解决方案是在allowedOrigins中添加file://.
。
请参阅下面的application.conf参考资料
play.filters.cors {
pathPrefixes = ["/*"]
allowedOrigins = ["file://*", "*"]
allowedHttpMethods = ["GET", "POST"]
preflightMaxAge = 3 days
}
您可以为任何其他后端执行相同的操作。