代码之家  ›  专栏  ›  技术社区  ›  claudiomatiasrg

无法在HttpInterceptor中发送FireBase令牌

  •  0
  • claudiomatiasrg  · 技术社区  · 8 年前

    我一直试图通过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)
          }
      }
    

    我试过筑巢 getIdToken() 里面 firebase.auth().onAuthStateChanged() 检查是否有用户登录但返回 null .

    我怎么解决这个问题?事先谢谢!

    1 回复  |  直到 8 年前
        1
  •  0
  •   claudiomatiasrg    8 年前

      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();
      }
    }
    
    推荐文章