2014-06-14 12 views
6

Qualche idea del perché locon credenziali corrette in Pebble JS Framework fallisce l'autenticazione di base su Android ma funziona in iOS?XMLHttpRequest fallisce l'autenticazione di base

Esattamente lo stesso codice, lungo le linee di:

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

Restituisce 401 in da Pebble Android app, ma autentica correttamente in iOS.

+0

Hai guardato questo? http://stackoverflow.com/questions/11025213/ios-authentication-using-xmlhttprequest-handling-401-reponse – JakeGould

+1

I downvoters si uniscono :) o almeno "si lamentano. E '"che hai provato tu"? Oppure "mostra il tuo sforzo/codice"? Sarò lieto di ascoltare. –

+0

@Jake, purtroppo non si applica a me. La parte JS dell'app Pebble funziona correttamente su iOS già. E fallisce sempre nel framework Android Pebble JS - anche con le credenziali corrette –

risposta

17

Ho trovato una soluzione che ha funzionato per me su Android.

Non so perché, ma richiesta diretta autenticato:

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

non ha funzionato per me - è sempre restituito 401. Così, invece ho cercato di impostare l'autenticazione di base tramite intestazione:

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

(dove Base64 è preso da qui: https://stackoverflow.com/a/246813/961695) - e ha funzionato! Forse c'è un bug nell'implementazione di XmlHttpRequest su Android.

+1

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

+4

Perché non provare btoa? è javascript pure .. ¬¬¬ un try 'req.setRequestHeader (" Autorizzazione "," Base "+ btoa (utente +": "+ pass));' – KingRider

+0

btoa è solo ASCII – diachedelic