4

我開發了一個Chrome,它使用XMLHttpRequest將帶有用戶名/密碼的GET HTTP請求發送到basic-auth保護的URL,以便它可以「自動登錄「之後(因爲Chrome緩存HTTP basic-auth的憑證)。使用用戶名/密碼發送GET HTTP請求的XMLHttpRequest

這是我使用的代碼:

var xml = new XMLHttpRequest(); 
    xml.open('GET',<url>,false,<username>,<password>) 
    xml.send(''); 

經過一些額外的研究,我發現它可能與Chrome瀏覽器19不支持用戶名:密碼@ URL語法用於驗證基本-auth的保護網址,因爲當我送了XMLHttpRequest,我看到這個谷歌瀏覽器的JS控制檯:

GET http://user:[email protected] 401(未授權)

有誰知道它是否是一個錯誤或Chrome是否停止支持這個功能嗎?

我的功能

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); 
     } 
    } 

回答

12

您需要頭手動添加到XHR請求。

xml.setRequestHeader( 「授權」, 「基本」 + BTOA(用戶名+ 「:」 +密碼))

演示在這裏:http://jsbin.com/inuhiv/2(注意,沒有什麼權威性,但看devtools看看要求具有權威性頭)

enter image description here

+0

不要在鉻工作.. –

+0

爲什麼無法在Chrome中工作?我現在把德功能代碼,以查看 –

+0

@RodrigoWaldow我使用了鉻,所以它的工作。如果您在Windows上使用域,則可能需要嘗試從您的用戶名中刪除該域。 – Kinlan

相關問題