XMLHttpRequest pour envoyer une requête HTTP GET avec un nom d'utilisateur/mot de passe
Je développe un Chrome utilise XMLHttpRequest pour envoyer une requête HTTP GET avec un nom d'utilisateur/mot de passe de base-auth-URL protégée, de sorte qu'il peut ensuite "connexion automatique" à la suite (depuis Chrome caches informations d'identification de base HTTP-auth).
Voici le code que j'utilise:
var xml = new XMLHttpRequest();
xml.open('GET',<url>,false,<username>,<password>)
xml.send('');
Après quelques recherches supplémentaires, j'ai trouvé qu'il pourrait avoir à faire avec Chrome 19 qui ne supporte pas la username:pwd@url la syntaxe pour l'authentification de base-auth protégé Url, parce que quand j'ai envoyer le XMLHttpRequest, je vois cela dans Google Chrome js console:
OBTENIR http://user:[email protected] 401 (non autorisé)
Personne ne sait si c'est un bug ou si Chrome a cessé le support de cette fonctionnalité?
Ma fonction
function autoLogin(domain, user, password) {
var httpAuth;
if (window.XMLHttpRequest) {
httpAuth = new XMLHttpRequest(); //code for IE7+, Firefox, Chrome, Opera, Safari
}
else if (window.ActiveXObject) {
httpAuth = new ActiveXObject("Microsoft.XMLHTTP"); //code for IE6, IE5
}
else {
alert("Seu browser não suporta autenticação xml. Favor autenticar no popup!");
}
var userName = domain + "\\" + user;
httpAuth.open("GET", "/_layouts/settings.aspx", false, userName, password);
httpAuth.onreadystatechange = function () {
if (httpAuth.status == 401) {
alert("Usuário e/ou senha inválidos.");
eraseCookie('AutoLoginCookieUserControl_User');
eraseCookie('AutoLoginCookieUserControl_Password');
}
else {
if ($(".pnlLogin").is(':visible')) {
$(".pnlLogin").hide();
$(".pnlUsuario").css("display", "block");
$(".avatar").css("display", "block");
var name = $().SPServices.SPGetCurrentUser({ fieldName: "Title" });
$(".loginNomeUsuario").html("Seja Bem Vindo(a) <br />" + name);
}
}
}
var userAgent = navigator.userAgent.toLowerCase();
$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
if ($.browser.chrome == true) {
httpAuth.setRequestHeader("Authorization", "Basic " + btoa(userName + ":" + password));
}
try {
httpAuth.send();
}
catch (err) {
console.log(err);
}
}
OriginalL'auteur Rodrigo Waldow | 2013-07-11
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'ajouter des en-têtes de la requête XHR manuellement.
xml.setRequestHeader("Autorisation", "Base" + btoa(nom d'utilisateur + ":" + mot de passe))
Démo ici: http://jsbin.com/inuhiv/2 (Remarque, il n'y a rien à auth, cependant regarder devtools et de voir la demande de a en-tête d'authentification)
pourquoi ne pas travailler dans Chrome? J'ai mis de la fonction de code pour voir
J'ai utilisé Chrome de sorte qu'il fonctionne. Si vous utilisez un nom de Domaine sur windows, vous pourriez vouloir essayer et de le supprimer à partir de votre nom d'utilisateur.
Avertissement cela ne fonctionne pas avec des caractères non-ascii.
Intéressant de noter que
setRequestHeader(...)
doit être appelée aprèsopen(...)
OriginalL'auteur Kinlan