Angular拦截器中的响应标头

时间:2015-08-19 22:39:07

标签: ajax angularjs restful-authentication

我有一个用于身份验证的拦截器。

当我收到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

如何进入回复标题?

2 个答案:

答案 0 :(得分:0)

responseError函数接收rejection而不是response。 因此,如果您想访问响应标头,您需要的内容如下所示。

'responseError': function(rejection) {
    if (rejection.status === 401) {
        console.log(rejection.config.headers);
    }
}

我希望这会对你有所帮助。 :)

答案 1 :(得分:0)

虽然我知道这不是答案,应该发表评论,但我在这里发布使用屏幕截图。

我尝试使用下面的测试环境获取响应标题。

nodejs server

res.setHeader('WWW-Authenticate', 'invalid_token');
res.status(401).send();

angularjs

'responseError': function(rejection) {
    if (rejection.status === 401) {
        console.log(rejection.headers('WWW-Authenticate'));
    }
}

Chrome开发工具屏幕截图

enter image description here

如您所见,我可以正确获取响应标头。 因此,我认为在您设置响应标头的服务器代码中似乎存在一些问题。

您是否要向我们展示您的chrome dev工具屏幕截图以及设置响应标头的服务器代码?