首页 > 解决方案 > 令牌拦截器中来自firebase用户的令牌?

问题描述

尝试从 FirebaseAuth.user.getIdToken() 获取 firebase 令牌。这是一个学校项目。我发布这个问题的原因主要是因为我注意到许多解决方案在我看来已经过时了。

将 Promise 转换为 Observable

https://gist.github.com/danielcrisp/ced7d092b07efa609285ba5f0823ca60

https://github.com/codediodeio/angular-firebase-stripe/blob/master/src/app/core/token.interceptor.ts

我尝试了上面链接中提供的一些解决方案,最终得到了这段代码。但它仍然无法正常工作。mergeMap 需要一个标记和一个索引。

错误我上线mergeMap((token: any, index: number) => {

错误:(27, 20) TS2345:类型为“(令牌:任意,索引:编号)=> HttpRequest”的参数不可分配给类型为“(值:任意,索引:编号)=> ObservableInput”的参数。类型“HttpRequest”不可分配给类型“ObservableInput”。“HttpRequest”类型中缺少属性“[Symbol.iterator]”,但在“Iterable”类型中是必需的。

import { Injectable } from '@angular/core';
import {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpClient} from '@angular/common/http';
import {from, Observable} from 'rxjs';
import {AuthService} from '../services/auth.service';
import {FirebaseAuth} from '@angular/fire';
import {User} from 'firebase';
import {mergeMap, switchMap} from 'rxjs/operators';

@Injectable()
export class TokenInterceptor implements HttpInterceptor {
  user: User;
  subscribe_firebase_user;

  constructor(private http: HttpClient, private fireAuth: FirebaseAuth) {
    this.user = fireAuth.currentUser;
    this.subscribe_firebase_user = this.fireAuth.onAuthStateChanged(a => {
      this.user = a;

    });
  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // add authorization header with jwt token if available
    const observable = from(this.user.getIdToken());
    if (this.user !== null) {
      return observable.pipe(
          mergeMap((token: any, index: number) => {
          request = request.clone({
              setHeaders: {
                Authorization: `Bearer ${token}`
              }}
            );
            return request;
          }

      ));

    }

    return next.handle(request);
  }
}

由此我希望令牌被加载,然后请求被发送到服务器。

感谢您提前提供帮助。

标签: angulartypescriptfirebasetokeninterceptor

解决方案


推荐阅读