Angular Can';t在HttpInterceptor中发送firebase令牌

Angular Can';t在HttpInterceptor中发送firebase令牌,angular,firebase,angular-http-interceptors,Angular,Firebase,Angular Http Interceptors,我一直试图通过HttpInterceptor向每个http请求添加Firebase令牌,但无法检索Firebase令牌。当我的拦截器运行时,用户显示为未登录 intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { try { firebase.auth().currentUser.getIdToken() .then(

我一直试图通过HttpInterceptor向每个http请求添加Firebase令牌,但无法检索Firebase令牌。当我的拦截器运行时,用户显示为未登录

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    try {
      firebase.auth().currentUser.getIdToken()
        .then((token) => {
            this.token = token;
        })
      req = req.clone({
      setHeaders: {
        'Content-Type' : 'application/json; charset=utf-8',
        'Accept'       : 'application/json',
        'Authorization': `${this.token}`,
      }
    });
    return next.handle(req);

      } catch(err) {
          console.log(err)
      }
  }
intercept(req:HttpRequest,next:HttpHandler):可观察{
试一试{
firebase.auth().currentUser.getIdToken()
。然后((令牌)=>{
this.token=token;
})
req=req.clone({
集合标题:{
“内容类型”:“应用程序/json;字符集=utf-8”,
“接受”:“应用程序/json”,
“授权”:“${this.token}”,
}
});
返回next.handle(req);
}捕捉(错误){
console.log(错误)
}
}
我尝试将
getIdToken()
嵌套在
firebase.auth().onAuthStateChanged()
中,以检查是否有用户登录,但它返回
null


我怎样才能解决这个问题?提前谢谢

我必须修改代码以使用异步函数,以便检索并等待令牌:

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return Observable.fromPromise(this.handleAccess(request, next));
  }

  private async handleAccess(request: HttpRequest<any>, next: HttpHandler):
      Promise<HttpEvent<any>> {
    const token = await this.authService.getFirebaseToken2();
    console.log(token)
    let changedRequest = request;
    const headerSettings: {[name: string]: string | string[]; } = {};

    for (const key of request.headers.keys()) {
      headerSettings[key] = request.headers.getAll(key);
    }
    if (token) {
      headerSettings['Authorization'] = token;
    }
    headerSettings['Content-Type'] = 'application/json';
    const newHeader = new HttpHeaders(headerSettings);

    changedRequest = request.clone({
      headers: newHeader});
    return next.handle(changedRequest).toPromise();
  }
}
intercept(请求:HttpRequest,下一步:HttpHandler):可观察{
返回Observable.fromPromise(this.handleAccess(request,next));
}
专用异步handleAccess(请求:HttpRequest,下一步:HttpHandler):
允诺{
const token=wait this.authService.getFireBaseToke2();
console.log(令牌)
让changedRequest=请求;
const headerSettings:{[name:string]:string | string[];}={};
for(request.headers.keys()的常量键){
headerSettings[key]=request.headers.getAll(key);
}
如果(令牌){
headerSettings['Authorization']=代币;
}
headerSettings['Content-Type']='application/json';
const newHeader=新的HttpHeaders(headerSettings);
changedRequest=request.clone({
标题:newHeader});
返回next.handle(changedRequest.toPromise();
}
}

我必须修改代码以使用异步函数,以便检索并等待令牌:

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return Observable.fromPromise(this.handleAccess(request, next));
  }

  private async handleAccess(request: HttpRequest<any>, next: HttpHandler):
      Promise<HttpEvent<any>> {
    const token = await this.authService.getFirebaseToken2();
    console.log(token)
    let changedRequest = request;
    const headerSettings: {[name: string]: string | string[]; } = {};

    for (const key of request.headers.keys()) {
      headerSettings[key] = request.headers.getAll(key);
    }
    if (token) {
      headerSettings['Authorization'] = token;
    }
    headerSettings['Content-Type'] = 'application/json';
    const newHeader = new HttpHeaders(headerSettings);

    changedRequest = request.clone({
      headers: newHeader});
    return next.handle(changedRequest).toPromise();
  }
}
intercept(请求:HttpRequest,下一步:HttpHandler):可观察{
返回Observable.fromPromise(this.handleAccess(request,next));
}
专用异步handleAccess(请求:HttpRequest,下一步:HttpHandler):
允诺{
const token=wait this.authService.getFireBaseToke2();
console.log(令牌)
让changedRequest=请求;
const headerSettings:{[name:string]:string | string[];}={};
for(request.headers.keys()的常量键){
headerSettings[key]=request.headers.getAll(key);
}
如果(令牌){
headerSettings['Authorization']=代币;
}
headerSettings['Content-Type']='application/json';
const newHeader=新的HttpHeaders(headerSettings);
changedRequest=request.clone({
标题:newHeader});
返回next.handle(changedRequest.toPromise();
}
}