5

Chrome を開発し、XMLHttpRequest を使用して、ユーザー名/パスワードを含む GET HTTP 要求を基本認証で保護された URL に送信し、後で「自動ログイン」できるようにします (Chrome は HTTP 基本認証の資格情報をキャッシュするため)。 .

私が使用するコードは次のとおりです。

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

追加の調査の結果、XMLHttpRequest を送信すると、Google Chrome の js コンソールでこれが表示されるため、basic-auth で保護された URL を認証するための username:pwd@url 構文をサポートしていない Chrome 19 に関係している可能性があることがわかりました。 :

GET http://user:pass@domain.com 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);
        }
    }
4

1 に答える 1

14

XHR リクエストにヘッダーを手動で追加する必要があります。

xml.setRequestHeader("Authorization", "Basic" + btoa(ユーザー名 + ":" + パスワード))

デモはこちら: http://jsbin.com/inuhiv/2 (注、認証するものは何もありませんが、devtools を見て、リクエストに認証ヘッダーがあることを確認してください)

ここに画像の説明を入力

于 2013-07-12T09:08:54.767 に答える