AngularJS $http 状态码重定向
AngularJS $http redirect on status code
我有一个包含许多 $http
请求的 angular 应用程序,如果服务器会话过期(获取 401),我想在登录页面上重定向用户。有谁知道解决方案 适用于所有 $http
而无需在每个 $http
上添加 .error()
?
您可以使用拦截器来实现这一点。来自 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);
}
};
}
]);
}
]);
如果能使用 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);
}
}
};
});
我有一个包含许多 $http
请求的 angular 应用程序,如果服务器会话过期(获取 401),我想在登录页面上重定向用户。有谁知道解决方案 适用于所有 $http
而无需在每个 $http
上添加 .error()
?
您可以使用拦截器来实现这一点。来自 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);
}
};
}
]);
}
]);
如果能使用 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);
}
}
};
});