我有一个phonegap应用程序连接到Web服务并使用http基本身份验证进行身份验证。它使用phonegap构建并针对Android和iOS。
在登录视图中,ajax请求将触发远程服务器以检查凭据是否正确,如果是,则将用户登录到主应用程序。
这在台式机上的ripple仿真器中成功完成,当部署到Android设备上时也是如此。
但是,当应用程序部署到iOS设备(ipod touch)时,身份验证请求根本无法完成。使用phonegap远程调试器我可以看到ajax请求启动但从未完成。它始终处于待定状态。我使用jquery ajax成功,错误和完整的处理程序请求,但没有一个被击中所以我没有机会看到从服务器返回任何错误消息。请求似乎永远不会完成。
我尝试向其他远程网站发出ajax请求,以测试我的应用可以通信并且成功,所以看起来好像我没有白名单问题。
关于问题的任何想法?
答案 0 :(得分:4)
请在底部阅读此答案的更新。
原始回答
我已经找到了问题所在,并设法让基本身份验证工作。
问题在于,网络服务器希望基本身份验证详细信息可以预先发送并附带请求。
要执行此操作,请使用' 标题' jquery ajax的属性如下所示:
$.ajax
({
type: "GET",
url: "https://webserver/authenticate",
headers: {
"Authorization": "Basic " + btoa(USERNAME + ":" + PASSWORD)
}
})
.done(function(){
alert('Authenticated!')
})
.fail(function(){
alert('Error!')
});
见相关答案: https://stackoverflow.com/a/11960692/1463497
<强>更新强>
我最终发现在iOS的Web视图中没有可靠的使用基本身份验证的方法。即如果输入了正确的凭据,但是当它们不存在且401挑战响应出现时,一切都很好,iOS网页视图似乎无法处理它。
最后,通过简单地传递用户名&#39;来实现Web服务身份验证。和密码&#39;参数作为网址的一部分:
url: "https://webserver/authenticate?username=abc&password=123"
这是我发现在Web视图中通过iOS和Android进行身份验证的唯一一致方式(通过完全取消基本身份验证)。这当然意味着更新Web服务本身以这种方式接受身份验证。