【发布时间】:2015-03-18 16:29:21
【问题描述】:
我正在使用 AngularJS 和 Angular ui 路由器设置授权。 如果用户尝试访问需要授权的路由,服务器会返回 401 状态码。
我创建了一个 HTTP 响应拦截器,用于检查 401 状态代码。 如果代码是 401,它应该重定向到登录页面,但这不起作用。 它捕获 401,但不重定向。下面是拦截器的代码:
app.config(['$httpProvider', function ($httpProvider) {
// This is just for to check for XHR requests on the server
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
$httpProvider.responseInterceptors.push(['$q', '$location', function ($q, $location) {
return function (promise) {
return promise.then(
// Success: just return the response
function (response) {
return response;
},
// Error: check the error status to get only the 401
function (response) {
if (response.status === 401)
$location.url('/users/login');
return $q.reject(response);
}
);
}
}]);
}]);
编辑:如果我这样做,它似乎可以工作:
$timeout(function() { $location.url('/users/login'); }, 0);
我猜这会将它放在执行堆栈的最后并更改执行上下文。有没有人对此了解更多,或者这是否确实有效或只是看起来有效?
【问题讨论】:
标签: javascript angularjs angular-ui-router