【发布时间】:2014-09-14 10:47:48
【问题描述】:
我在处理应用程序范围内的 401 错误方面有点挣扎。
其他一些对我没有帮助的帖子: Angularjs - handling 401's for entire app 401 unauthorized error handling in AngularJS
我必须发送一个身份验证令牌,如果它是在每个请求中定义的,这就是我需要在拦截器中的请求部分的原因。
我目前的做法是这样的:
module.factory('authInterceptor', function ($rootScope, $q, $window, $location) {
return {
request: function (config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
else{
console.log("authInterceptor: No Token to send")
}
return config;
},
response: function (response) {
if (response.status == 401) {
console.log("No Logged In");
$location.path('/login');
}
return response || $q.when(response);
},
responseError: function(rejection){
var defer = $q.defer();
if(rejection.status == 401){
console.log("401 Rejection");
console.dir(rejection);
}
defer.reject(rejection);
return defer.promise;
}
};
});
就我的调试而言,如果请求后发生 401,它将在 repsonse 函数中处理。这本身就给了原始调用者一个承诺。
如果我注释掉 $q.when(response) 并且只返回响应,则没有任何变化。
响应甚至在原始调用者得到 .error 之前就被调用
感谢任何想法。希望我离解决方案不远。
【问题讨论】:
标签: angularjs access-token http-status-code-401 jwt