angular – 尝试在http拦截器中进行重定向到403错误的登录页面

前端之家收集整理的这篇文章主要介绍了angular – 尝试在http拦截器中进行重定向到403错误的登录页面前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图制作一个http拦截器,如果附加401或403错误,它会重定向登录页面.拦截器没问题,但是当我执行“router.navigate”时,我有一个错误:“无法读取未定义的属性’导航’”.

我的http拦截器:

@Injectable()
export class RedirectHttp extends Http {
constructor(protected backend: ConnectionBackend,protected defaultOptions: RequestOptions,private router: Router,private loginUrl: string) {
    super(backend,defaultOptions);
}

...

intercept(observable: Observable<Response>): Observable<Response> {
    return observable.catch(this.handleError) as Observable<Response>;
}

private handleError(error: any): any {
    if (error.status === 401 || error.status === 403 && !error.url.endsWith("/" + this.loginUrl)) {
        this.router.navigate([this.loginUrl]);
        return Observable.empty();
    } else {
        return Observable.throw(error);
    }

}

}

application.Module.ts上的声明:

@NgModule({
    declarations: [...],entryComponents: [...],imports: [
        BrowserModule,routing,FormsModule,ReactiveFormsModule,HttpModule,],providers: [
        appRoutingProviders,{provide: Http,useFactory: (xhrBackend: XHRBackend,requestOptions: RequestOptions,router: Router) => new RedirectHttp(xhrBackend,requestOptions,router,LOGIN.path),deps: [XHRBackend,RequestOptions,Router]
        }
    ],bootstrap: [ApplicationApp]
})
export class AppModule {
}

我认为路由器注入有一个错误,但我找不到.

解决方法

我有同样的问题,唯一帮助我重定向的是:

intercept(observable: Observable<Response>): Observable<Response> {
    return observable.catch((error) => {
        if (error.status === 401 || error.status === 403) {
            this.router.navigate([this.loginUrl]);
        }
        return this.handleError(error);
    });
}

猜你在找的Angularjs相关文章