我有一个应用程序,我在15分钟不活动后创建了一个拦截器来处理令牌过期,它在令牌过期后成功重定向到登录页面,但是在重定向到登录页面后我无法显示错误。
我的问题是,在拦截器将应用程序重定向到该页面后,如何在登录页面上向用户显示令牌过期错误。
继承我的重定向器:
app
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(function($q, $location, LoopBackAuth) {
return {
responseError: function(rejection) {
if (rejection.status == 401) {
//Now clearing the loopback values from client browser for safe logout...
LoopBackAuth.clearUser();
LoopBackAuth.clearStorage();
$location.path("/login");
}
return $q.reject(rejection);
}
};
})
}])
.config(function(LoopBackResourceProvider) {
LoopBackResourceProvider.setAuthHeader('X-Access-Token');
})
答案 0 :(得分:0)
最后,感谢@forrestmid指出我正确的方向,这就是我最终做的事情。
在http拦截器上添加了:
$location.path("/login").search({error: 'invalid_token'});
然后在控制器上必须做:
var queryString = $location.search();
$scope.errors = {};
if (queryString && queryString.error) {
$scope.errors = {
'invalid_token': {
code: 'invalid_token'
}
}
}
现在在模板上我已经有了处理错误对象的逻辑,所以现在它工作正常:)
答案 1 :(得分:0)
引用this post关于将$ state服务注入HTTP拦截器:
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(function($q, $injector, LoopBackAuth) {
return {
responseError: function(rejection) {
if (rejection.status == 401) {
//Now clearing the loopback values from client browser for safe logout...
LoopBackAuth.clearUser();
LoopBackAuth.clearStorage();
$injector.get('$state').go('app.login', {error: 'Token expired.'});
}
return $q.reject(rejection);
}
};
})
}]);
假设你正在使用ui.router:
app.config(function($stateProvider){
$stateProvider
.state("app",{abstract: true})
.state("app.login", {
url: "/login",
params: {error: ""}
});
});
默认情况下,转换到app.login
状态时不会出现错误,但是当有任何参数错误设置时,它会显示错误。这将位于登录页面上的$stateParams.error
变量中。
如果我没有测试任何代码,请告诉我。我认为你想要的是$ injector线。