Javascript PhoneGap/Cordova未侦听401,将http响应代码修改为200不工作

Javascript PhoneGap/Cordova未侦听401,将http响应代码修改为200不工作,javascript,ajax,angularjs,cordova,httpresponse,Javascript,Ajax,Angularjs,Cordova,Httpresponse,CPG=Cordova/PhoneGap 这个问题几乎是我先前关于PhoneGap/401错误的问题的结果: 当时的解决方案是对所有调用执行超时。在这部电影上映之前,一切都很好。我们意识到该应用程序正在不稳定的区域使用,“超时”可能只是因为当时没有足够好的连接。因此,对于我们的环境/应用程序来说,这不是一个可接受的解决方案 由于CPG不“监听”401响应代码,我想也许我可以将响应代码更改为我们知道CPG监听的代码,然后相应地修改消息体和流程 因此,我们在网关(防火墙->负载平衡器->网关(进行A

CPG=Cordova/PhoneGap

这个问题几乎是我先前关于PhoneGap/401错误的问题的结果:

当时的解决方案是对所有调用执行超时。在这部电影上映之前,一切都很好。我们意识到该应用程序正在不稳定的区域使用,“超时”可能只是因为当时没有足够好的连接。因此,对于我们的环境/应用程序来说,这不是一个可接受的解决方案

由于CPG不“监听”401响应代码,我想也许我可以将响应代码更改为我们知道CPG监听的代码,然后相应地修改消息体和流程

因此,我们在网关(防火墙->负载平衡器->网关(进行AD身份验证的地方)->服务)级别应用了修改所有401响应以返回200状态码、消息“身份验证失败”之类的过程

第一个测试是检查并确保我们通过Fiddler获得正确的响应。一切都很好。接下来,当签入ou CPG应用程序(运行AngularJS)时,我们仍然没有收到任何响应。我可以在Fiddler中看到,每次使用无效凭据调用服务时,它都会在500毫秒内返回响应。尽管如此,我们从未在应用程序中收到它

是否有其他标题或其他内容可能会阻止此操作?在Fiddler中,200响应是非常基本的。我读到关于“www-Authenticate”头是CPG无法获得(处理)响应的原因,但这是因为它是在401而不是200中返回的

为什么中央人民政府不接收这些信息

这是代码,并不是说它会有多大帮助

$http.defaults.headers.common.Authorization = 'Basic ' + $rootScope.basicAuth;

$http({
    method: "POST",
    url: url,
    data: {
        "Username": user,
        "Password": password,
        "AccessToken": ""
    },
    headers: { "Content-Type": "application/json",
    "Accept-Encoding": "gzip" },
    timeout: 10000
})
.success(function (data, status, headers, config) {
    if (data.IsAuthenticated) {
        deferred.resolve(true);
        session.setSession();
    } else {
        //deferred.reject(status); // This is always a 200, so let's return a generic message
        window.logger.logIt("Status: " + status + "; Data: " + data);
        deferred.reject("Authentication Failed");
    }
})
.error(function (data, status, headers, config) {
    window.logger.logIt("status: " + status);
    deferred.reject("Authentication Failed");
});
编辑:
在CPG站点上发现此错误/问题。最后一条评论提到,只要删除“WWW-Authenticate”头就可以解决这个问题。但我也尝试过这种实现,但它对我也不起作用

嗯,这真是太尴尬了(不知道为什么我不只是删除这个问题…)

如果你调用正确的url,以上方法确实有效

我的服务器/网络人员为我们的路径配置了这些更改

但是,我将我的环境指向(我没有https:///中的s)

在解决了这个问题之后,我就能够收到200美元,并相应地进行处理

但是,这让我想测试一下删除WWW-Authenticate头是否也得到了修复。是的,的确如此


在CPG/iOS应用程序中恢复401的修复方法是删除WWW-Authenticate头。

您不能总是期望服务器是可配置的。特别是当您为第三方客户制作应用程序时。不能告诉所有人“嘿,请删除WWW-Authenticate头以使用我的应用程序”。不是那样的

没错。我目前正在使用第三方API,并试图找到解决此问题的方法。