Sto scrivendo un'applicazione iOS utilizzando PhoneGap (ovvero Cordova), ho una semplice pagina di accesso html che registra l'utente utilizzando una XMLHttpRequest con autenticazione di base su SSL. Tutto funziona splendidamente quando inserisci il nome utente e la password correttamente. Tuttavia, se si immette il nome utente/password errato, nessuno dei miei callback viene mai chiamato.iOS: autenticazione tramite XMLHttpRequest - Gestione della risposta 401
Se si esegue lo stesso codice su Chrome, ad esempio, con nome utente/password errati, chrome si comporta in modo simile, tranne che apre una finestra di dialogo di verifica autenticazione. Colpire cancel sulla finestra di chrome restituisce il controllo al mio codice javascript. Sfortunatamente, su iOS, UIWebView non visualizza nemmeno una finestra di dialogo di autenticazione, ma semplicemente si blocca. Ho bisogno di un modo per dire all'utente che hanno inserito il nome utente o la password sbagliati in modo che possano riprovare.
La cosa più vicina a una risposta che ho trovato è stata questa http://www.freelock.com/2008/06/technical-note-http-auth-with-ajax ma cambiare lo stato di risposta dal server non sembra la cosa giusta da fare.
Ecco come appare il mio codice di richiesta, ma quando viene inviato un nome utente o una password errati non raggiunge mai il mio callback onload (infatti il callback onreadystatechange viene chiamato una sola volta e questo è per readyState 1, ovvero OPEN).
var req = new XMLHttpRequest();
req.onload = function(ev) {
if (req.status == 401) {
alert("Invalid Username/Password");
document.getElementById('password').focus();
} else if (req.status == 200) {
window.location.href = some_secure_site;
} else {
// edit //
alert("Some other status");
}
}
req.onerror = function (ev) { alert('Error'); };
req.ontimeout = function(ev) { alert('Timeout'); };
req.open('GET', uri, true, userValue, passValue);
req.withCredentials = true;
req.send();
Sembra essere correlato a questo problema: https://issues.apache.org/jira/browse/CB-2415 si prega di votare per farlo riparare presto – martinoss