我有一个带有许多$http
请求的角度应用程序,如果服务器会话到期,我想在登录页面上重定向用户(获取401)。有没有人知道一个适用于所有$http
的解决方案,而不是在每个.error()
上添加$http
?
答案 0 :(得分:4)
如果您可以使用http拦截器重定向所有检测到的401错误,那会更好。
// add an http interceptor via app.config
app.config(function($$httpProvider) {
$httpProvider.interceptors.push('my401Detector');
});
// interceptor logic.
app.factory('my401Detector', function($location, $q) {
return {
responseError: function(response) {
if(response.status === 401) {
$location.path('/login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
};
});
答案 1 :(得分:2)
您可以使用拦截器来实现此目的。来自Mean.js源代码
angular.module('users').config(['$httpProvider',
function($httpProvider) {
// Set the httpProvider "not authorized" interceptor
$httpProvider.interceptors.push(['$q', '$location', 'Authentication',
function($q, $location, Authentication) {
return {
responseError: function(rejection) {
switch (rejection.status) {
case 401:
// Deauthenticate the global user
Authentication.user = null;
// Redirect to signin page
$location.path('signin');
break;
case 403:
// Add unauthorized behaviour
break;
}
return $q.reject(rejection);
}
};
}
]);
}
]);