Estoy escribiendo una aplicación de iOS usando PhoneGap (también conocido como Cordova), tengo una página de inicio de sesión html simple que registra al usuario usando XMLHttpRequest con autenticación básica sobre SSL. Todo funciona espléndidamente cuando ingresas correctamente tu nombre de usuario y contraseña. Sin embargo, si ingresas el nombre de usuario/contraseña incorrectos, nunca se llamará a ninguno de mis callbacks.iOS: Autenticación usando XMLHttpRequest - Manejo de 401 respuesta
Si ejecuta el mismo código en Chrome, por ejemplo, con el nombre de usuario/contraseña incorrectos, cromo se comporta de manera similar, excepto que aparece un cuadro de diálogo de desafío de autenticación. Pulsar cancelar en el cuadro de diálogo de Chrome devuelve el control a mi código de JavaScript. Desafortunadamente, en iOS, UIWebView ni siquiera muestra un cuadro de diálogo de autenticación, simplemente se cuelga. Necesito una forma de decirle al usuario que ingresaron el nombre de usuario o contraseña incorrectos para que puedan volver a intentarlo.
Lo más parecido a una respuesta que pude encontrar fue http://www.freelock.com/2008/06/technical-note-http-auth-with-ajax pero cambiar el estado de la respuesta del servidor no parece lo correcto. Aquí está básicamente mi código de solicitud, pero cuando se envía un mal nombre de usuario o contraseña nunca llega a mi callback (de hecho, la devolución de llamada onreadystatechange solo se llama una vez y eso es para readyState 1, también conocido como 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();
Parece estar relacionado con ese problema: https://issues.apache.org/jira/browse/CB-2415 por favor vote para arreglarlo pronto – martinoss