2016-09-15 7 views
3

401エラーまたは403エラーが追加された場合、ログインページにリダイレクトするhttpインターセプターを作ろうとします。インターセプタに問題はありませんが、 "router.navigate"を実行するとエラーが発生します: "未定義のプロパティ 'をナビゲートできません"。httpのインターセプターでログインページにリダイレクトしようとすると403エラーになる

私のhttpインターセプタ:application.Module.ts上

@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); 
    } 

} 

}

宣言:

@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 { 
} 

は、私はルータ注入と間違いがあると思いますが、私ドンどこにいるの?

答えて

0

私は同じ問題を抱えていたし、リダイレクトで私を助けた唯一のものだった:

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); 
    }); 
} 
関連する問題