如何在AngularJS中重置全局基本身份验证标头?

如何在AngularJS中重置全局基本身份验证标头?,angularjs,http-headers,Angularjs,Http Headers,在我的angular应用程序中,为每个请求定义了全局$http头,如下所示: function useBasicAuth(username, hash) { var encoded = btoa(username + ':' + hash); $http.defaults.headers.common.Authorization = 'Basic ' + encoded; } 例如,当用户注销并且不再需要身份验证时,如何禁用发送此信息?我发现一个可行的解决方案是重新声明$htt

在我的angular应用程序中,为每个请求定义了全局
$http
头,如下所示:

function useBasicAuth(username, hash) {
    var encoded = btoa(username + ':' + hash);
    $http.defaults.headers.common.Authorization = 'Basic ' + encoded;
}

例如,当用户注销并且不再需要身份验证时,如何禁用发送此信息?

我发现一个可行的解决方案是重新声明
$http.defaults.headers.common
对象,使其不包含头

例如:

function useBasicAuth(username, hash) {
    var encoded = btoa(username + ':' + hash);
    $http.defaults.headers.common.Authorization = 'Basic ' + encoded;
}
但是,这不会从浏览器中删除缓存的凭据。为了克服这个问题,我做了一个简单的异步调用,目的是生成一个错误的请求

这是我的accountServices工厂中的功能:

function checkAuth(username, hash) {
    var encoded = btoa(username + ':' + hash);
    var result = false;

    $.ajax({
        type: "POST",
        beforeSend: function (request) {
            request.setRequestHeader("Authorization", 'Basic ' + encoded);
        },
        url: "user/current",
        statusCode: {
            401: function () {
                result = false;
            },
            200: function (response) {
                result = response;
            }
        },
        async: false
    });

    return result;
}
要注销用户,我调用此函数:

function useBasicWithoutAuth() {
    accountServices.checkAuth('logout','logout');
    $http.defaults.headers.common = {Accept: "application/json, text/plain, */*"};

}
它首先向一个受保护的URL发送一个请求,请求中有一个假的不存在的用户,所以基本上是一样的,就好像提示会出现在你面前,你会点击取消

完成此操作后,浏览器中没有缓存数据,我们可以简单地从Angular中删除标题,这样它就不会发送任何不需要的
授权
信息