我正在使用ngx-restangular和Angular 4。
我想拦截请求,如果http状态代码为403,我想将用户重定向到登录页面。
现在我的app.module.ts
/**
* NGX-ANGULAR configs.
*/
// Function for setting the default restangular configuration
export function RestangularConfigFactory (RestangularProvider) {
// Set base URL
RestangularProvider.setBaseUrl('http://192.168.1.79:8080/api/');
// If token not valid/expired
RestangularProvider.addErrorInterceptor((response, subject, responseHandler) => {
if (response.status === 403) {
// Redirect user to login page
//Router.navigateByUrl(['login']);
return false; // error handled
}
return true; // error not handled
});
}
Router.navigateByUrl(['login']);
显然无效。
我尝试从Router
导入@angular/router
并将其注入AppModule构造函数,但无法访问this
内的RestangularConfigFactory
功能
任何人都可以帮忙吗?
谢谢。
答案 0 :(得分:1)
我在试图找出同样的事情时遇到了你的问题,并且认为我会和你(以及其他任何人一起寻找)分享我的解决方案。
在RestangularModule
中设置imports
模块时,您可以指定要传递给配置工厂的任何其他服务。就我而言,我已经通过了我的身份验证服务:
export function restangularConfigFactory(restangularProvider, auth) {
// set base url and add token to all requests
...
}
@NgModule({
...
imports: [
...
RestangularModule.forRoot([AuthService], restangularConfigFactory)
],
...
})
所以我所要做的就是将Router
添加到我的函数参数和我的服务列表中,如下所示(不要忘记import { Router } from '@angular/router';
):
export function restangularConfigFactory(restangularProvider, auth, router) {
// set base url and add token to all requests
...
}
@NgModule({
...
imports: [
...
RestangularModule.forRoot([AuthService, Router], restangularConfigFactory)
],
...
})
然后我可以像其他地方一样使用router
:
export function restangularConfigFactory(restangularProvider, auth, router) {
...
restangularProvider.addErrorInterceptor((response, subject, responseHandler) => {
if (response.status == 403) {
router.navigate(['login']);
return false;
}
else {
return true;
}
});
...
}