angular - 尝试在 403 错误时重定向到登录页面的 http 拦截器

标签 angular

我尝试制作一个 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/

相关文章:

Angular 7 生产构建失败

testing - 我如何测试这个 Angular 2 服务?

angular - ionic 4 通过模态 Controller 使用模态

angular - RxJs映射传递一个数组而不是数组的一个元素

node.js - ionic 2 - watch 失败

javascript - 在 Angular 2 中实现 Wikitude

Angular svg不同实例共享相同的defs

angular typescript - 何时指定参数类型

javascript - 如何在 TypeScript/Angular 中初始化类型化对象?

angular - 如何限制模态框中的Tab键?