2014-06-14 44 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