10

在构建和运行离子应用程序时,我遇到了非常奇怪的问题。我正在从服务器调用登录 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;
        }

但是,所有获取请求都可以正常工作。

4

4 回答 4

2

我最近遇到了这个问题,如果没有收到 403,我无法从 iPhone 上运行的应用程序或模拟器中发布任何内容,但它确实可以直接在任何浏览器上工作,包括我手机上的浏览器并使用 Postman-chrome 插件。

这似乎是来自 Ionic 应用程序的任何 POST 请求的问题:它将Origin标头发送为 file://. 使用 Play Framework 2.4 后端,我必须CORSFilter完全禁用(play.http.filters从 application.conf 中删除)才能正常工作。我将进一步调查,也许稍后会提供更多细节。

  • 注意 - 我在客户端/应用程序端尝试了大量配置更改,包括 Cordova 白名单插件X-Requested-WithContent-Type标头设置,<allow-navigation href="*"\>但没有任何效果。
于 2015-09-05T03:39:57.857 回答
1

当我运行应用程序时它起作用了

$ionic run --livereload android
于 2014-12-23T12:25:00.347 回答
1

access 元素为您的应用程序提供了对其他域上资源的访问权限,特别是,它允许您的应用程序从外部域加载页面,这些页面可以接管您的整个 web 视图。只需将其添加到 config.xml

 <access origin="*" subdomains="true"/>

于 2014-12-23T12:02:32.320 回答
1

在 Play Framework 2.4 后端时,我遇到了与 @BatteryAcid 相同的问题。解决方案是简单地添加file://.allowedOrigins。

请参阅下面的 application.conf 参考

play.filters.cors {
  pathPrefixes = ["/*"]
  allowedOrigins = ["file://*", "*"]

  allowedHttpMethods = ["GET", "POST"]
  preflightMaxAge = 3 days
}

您可能可以对任何其他后端执行相同的操作。

于 2016-08-14T04:21:09.577 回答