Ajax: HTTP Basic Auth and authentication cookie

前端 未结 1 1958
醉酒成梦
醉酒成梦 2021-02-03 13:47

I want to store the HTTP basic authentication headerline in an authentication cookie, so that I don\'t have to deal with the authorisation header in subsequent requests (I\'m us

1条回答
  •  佛祖请我去吃肉
    2021-02-03 14:25

    It seems, that it didn't work for the first user either. The problem was, that the authorization header was probably set by the browser earlier on (when I used the authentication dialog of the browser).

    What I'm doing now is storing the login information in a standard name=value cookie and setting the authorization header manually.

    Set the cookie:

    var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
    document.cookie = "Authorization=" + header;
    

    Read the cookie:

    function getAuthCookie() {
       var cn = "Authorization=";
       var idx = document.cookie.indexOf(cn)
    
       if (idx != -1) {
           var end = document.cookie.indexOf(";", idx + 1);
           if (end == -1) end = document.cookie.length;
           return unescape(document.cookie.substring(idx + cn.length, end));
       } else {
           return "";
      }
    }
    

    Set the authorization header:

        $.ajax({
            type: "GET",
            url: "http://someurl",
            contentType: "application/json; charset=utf-8",
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", getAuthCookie());
            },
            dataType: "json",
            success: auth.success,
            error: auth.error
        });
    

    This seems a bit awkward, but it works.

    0 讨论(0)
提交回复
热议问题