如何在拦截器之前发出httpclient请求?

时间:2020-07-15 19:30:42

标签: angular typescript request httpclient interceptor

我需要在每个请求中注入一个令牌。

我使用拦截器,但是要获取此令牌,我需要向我的Webserveur发出请求。

但是我找不到这种工作的方法。

我需要拦截器来等待我的令牌请求,但是我找不到实现该目标的方法。

我有这样的尝试异步功能:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  this.loadingService.present();


  if(request.url != "/rest/session/token")
  {
   return from(this.handleAccess(request,next)).pipe(
    map((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        this.loadingService.dismiss();
      }
      return event;
    }),
    catchError((err: HttpErrorResponse) => {
        this.loadingService.dismiss();
        if ((err.status === 401 || err.status === 403) && this.router.url !== '/login'){
          this.storageService.setUid("");
          this.router.navigate(['/login']);
        }
      return throwError(err);
    }));;
  }else{
    return next.handle(request);
  } 
  }

 private getXCRFToken() {

    return  this.httpClient.get(environment.server_rest+'/rest/session/token').pipe(
          tap(async (res) => {
            console.log(res)
          })
      
        );
      
    }

 

  private async handleAccess(request: HttpRequest<any>, next: HttpHandler):
  Promise<HttpEvent<any>> {
    let tokenXcrf:any;
    console.log("call token XCRF");
    tokenXcrf =  await this.getXCRFToken().toPromise();
    console.log('valeur xcrf:',tokenXcrf);

  let changedReq;

     changedReq = request.clone({
      headers: new HttpHeaders({
        'X-CSRF-Token': tokenXcrf,
      })
  });




  return next.handle(changedReq).toPromise();

}

我从请求中一直没有得到答复。 但是在网络开发工具中,我看到带有令牌的/ token请求调用。

我在做什么错了?

0 个答案:

没有答案