我有一个用于身份验证的拦截器。
当我收到401响应错误时,我希望从响应中获取标题。
拦截器是:
function ($httpProvider, fileUploadProvider) {
$httpProvider.interceptors.push(function($q, $localStorage) {
return {
'request': function(config) {
if ($localStorage.token) {
config.headers.Authorization = 'Bearer ' + $localStorage.token;
}
return config;
},
'responseError': function(response) {
if (response.status === 401) {
//$rootScope.$broadcast('unauthorized');
// WWW-Authenticate: Bearer error="invalid_token"
var authResult = response.headers('WWW-Authenticate');
if (authResult.indexOf("invalid_token")>-1) {
$localStorage.token = null;
$timeout(function(){
;
});
}
}
return response;
}
};
我想从响应中获取WWW-Authenticate标头。
通过查看Chrome开发人员工具中的网络标签,我可以确认标头位于网络服务电话的响应中。如果我在响应处理程序函数中设置了一个断点,然后在控制台中运行console.log(response.headers()),我得到:
Object {}
undefined
如何进入回复标题?
答案 0 :(得分:0)
responseError函数接收rejection
而不是response
。
因此,如果您想访问响应标头,您需要的内容如下所示。
'responseError': function(rejection) {
if (rejection.status === 401) {
console.log(rejection.config.headers);
}
}
我希望这会对你有所帮助。 :)
答案 1 :(得分:0)
虽然我知道这不是答案,应该发表评论,但我在这里发布使用屏幕截图。
我尝试使用下面的测试环境获取响应标题。
res.setHeader('WWW-Authenticate', 'invalid_token');
res.status(401).send();
'responseError': function(rejection) {
if (rejection.status === 401) {
console.log(rejection.headers('WWW-Authenticate'));
}
}
如您所见,我可以正确获取响应标头。 因此,我认为在您设置响应标头的服务器代码中似乎存在一些问题。
您是否要向我们展示您的chrome dev工具屏幕截图以及设置响应标头的服务器代码?