如何在AngularJS中重置全局基本身份验证标头?
在我的angular应用程序中,为每个请求定义了全局如何在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
$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中删除标题,这样它就不会发送任何不需要的授权
信息