在我的角度应用中,为每个请求定义了全局$http
标头,如下所示:
function useBasicAuth(username, hash) {
var encoded = btoa(username + ':' + hash);
$http.defaults.headers.common.Authorization = 'Basic ' + encoded;
}
如何禁用发送此信息,例如用户注销,并且不再需要身份验证?
答案 0 :(得分:1)
我发现的工作解决方案是重新声明$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中删除标题,因此它不会发送任何Authorization
信息,而不需要它。