如何在Ionic中使用重定向正确处理403错误?

时间:2017-12-19 21:00:54

标签: ionic-framework error-handling authorization

我正在尝试使用HttpInterceptor在Ionic中实现一个全局授权错误处理程序,如果从服务器返回403,它会重定向到HomePage:

import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import { NavController } from 'ionic-angular';
import { App } from "ionic-angular";

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {

    private navCtrl: NavController;

    constructor(private app:App) {
        this.navCtrl = app.getActiveNavs()[0];
    }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(req)
            .catch((error, caught) => {
                if (error.status == 403) {
                    this.navCtrl.setRoot('HomePage');
                }
                return Observable.throw(error);
            }) as any;
    }
}

但是,navCtrl在拦截器内部无法正常工作(也不应该使用)。 另一方面,在每个服务调用中添加重定向逻辑非常难以维护:

someComponentMethod() {
    this.someService.findAll()
      .subscribe(response => {
          this.items = response;
      },
      error => {
        if (error.status == 403) {
          this.navCtrl.setRoot('HomePage');
        }
      });
  }

我认为我的问题的主要观点是“当从服务器返回403时如何编写全局重定向机制”。上面的代码实际上不起作用:403错误发生,我可以通过拦截器内的代码在控制台中打印东西,但是'HomePage'没有被加载。

那么如何在Ionic中使用重定向正确处理403错误?

0 个答案:

没有答案
相关问题