angularjs - Angular 拦截器不拦截 401 响应

标签 angularjs

我已经创建了 http 拦截器并附加到我的主应用程序,如下所示:

angular.module('app',['ui.router'])
.factory('AuthInterceptor',function($window,$q){
  return{
    request: function(config){
      console.log("config object is");
      console.log(config);
      if($window.sessionStorage.getItem('token')){
        config.headers['x-access-token']= $window.sessionStorage.getItem('token');
      }
      return config || $q.when(config);

    },

    response: function(response){

     console.log("response object is:");
     console.log(response);

      if (response['status'] >= 400) {
       console.log("Not Authorized.kindly login first");
        $state.transitionTo('login');
      }
      return response || $q.when(response);

    }


  };
})

.config(function($httpProvider){
  $httpProvider.interceptors.push('AuthInterceptor');
});

在服务器端(一些明确的代码)我正在检查用户是否被授权,如果没有我用下面的代码响应(只显示代码的一个子集以保持简洁):

if(!req.user){  
   res.send('Not authorized',400);
}

服务器代码工作正常(我可以在 chrome 开发人员工具的网络选项卡中看到它) 但是 AuthInterceptor.response() 不会被调用。 但是请注意,当响应状态为 200 时,AuthInterceptor.response() 会执行

所以我很困惑..为什么不拦截 400 状态?

最佳答案

如果响应状态码超出范围 [200-299],则调用 responseError 拦截器。

你需要提供一个responseError拦截器:

return {
    request: function (config) {...},
    responseError: function (rejection) {...}
};

关于angularjs - Angular 拦截器不拦截 401 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041730/

相关文章:

javascript - 将独特的样式应用于 Angular 中 ng-repeat 列表中的每个 <li>

javascript - 通过 Controller 设置默认顺序

javascript - ng-include 改变 angular-ui datepicker 的行为

javascript - AngularJS - ng-grid - 日期列问题

javascript - 如何链接 javascript 选择器

javascript - 指令使 $scope.$watch 触发两次?

angularjs - Angular js 有哪些替代方案?

javascript - 无法读取模态中未定义的属性 'grid'?

javascript - AngularJS变量不会在 View 内更新

javascript - json 未按正确顺序打印