我已经创建了 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/