2014-06-14 45 views
6

任何想法为什么XMLHttpRequestPebble JS Framework中使用正确的凭据会在Android上失败基本身份验证,但在iOS中有效?XMLHttpRequest基本身份验证失败

完全相同的代码,沿着线:

var req = new XMLHttpRequest(); 
req.open(method, url, true, user, pass); 
req.send(data); 
req.onreadystatechange = function() { ... } 

返回401从Android的卵石的应用程序,但在IOS正确地进行认证。

+0

你看过吗? http://stackoverflow.com/questions/11025213/ios-authentication-using-xmlhttprequest-handling-401-reponse – JakeGould

+1

Downvoters团结:)或至少'splain自己。它是“你试过的是什么”?或者“显示你的努力/代码”?我会很乐意听。 –

+0

@JakeGould不幸的是,它不适用于我。 Pebble应用程序的JS部分已经在iOS上正常工作。并且总是在Android Pebble JS框架中失败 - 即使使用正确的凭据 –

回答

17

我发现了一个在Android上适用于我的解决方法。

不知道为什么,但直接身份验证的请求:

req.open(method, fullurl, true, user, pass); 
    req.send(data); 

我没有工作 - 它总是返回401所以不是我试图通过头设置基本身份验证:

req.open(method, fullurl, true); 
    req.setRequestHeader("Authorization", "Basic " + Base64.encode(user + ":" + pass)); 
    req.send(data); 

(其中Base64取自:https://stackoverflow.com/a/246813/961695) - 它工作!也许在android上的XmlHttpRequest实现中有一个bug。

+1

Google问题:https://code.google.com/p/chromium/issues/detail?id=128323 – StarQuake

+4

为什么不尝试btoa? is javascript pure ..¬.¬尝试'req.setRequestHeader(“Authorization”,“Basic”+ btoa(user +“:”+ pass));' – KingRider

+0

btoa仅仅是ASCII – diachedelic