我尝试制作一个 http 拦截器,如果附加了 401 或 403 错误,它会重定向到登录页面。拦截器没有问题,但是当我执行“router.navigate”时出现错误:“无法读取未定义的属性‘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 {
}
我认为 Router 注入(inject)有错误,但我没有找到错误所在。
最佳答案
我遇到了同样的问题,唯一帮助我重定向的是:
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);
});
}
关于angular - 尝试在 403 错误时重定向到登录页面的 http 拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515513/