[英]Response headers in Angular interceptor
我有一个用于身份验证的拦截器。
当我得到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开发人员工具中的网络标签,我可以确认标题位于Web服务调用的响应中。 如果我在响应处理程序函数中设置了一个断点,然后在控制台中运行console.log(response.headers()),我得到:
Object {}
undefined
如何进入响应标头?
responseError函数接收rejection
而不是response
。 因此,如果您想访问响应标头,您需要的是如下所示。
'responseError': function(rejection) {
if (rejection.status === 401) {
console.log(rejection.config.headers);
}
}
我希望这会对你有所帮助。 :)
虽然我知道这不是答案,应该发表评论,但我在这里发布使用屏幕截图。
我尝试使用下面的测试环境获得响应标头。
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工具屏幕捕获以及设置响应标头的服务器代码?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.