要使HttpInterceptor在angularfire2/Firestore API调用中工作,您需要自己实现一个FirestoreInterceptor来拦截请求并添加身份验证标头。以下是一个示例:
首先,创建一个FirestoreInterceptor类并实现HttpInterceptor接口:
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { AngularFireAuth } from '@angular/fire/auth';
@Injectable()
export class FirestoreInterceptor implements HttpInterceptor {
constructor(private afAuth: AngularFireAuth) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.afAuth.idToken.pipe(
take(1),
switchMap(idToken => {
if (idToken) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${idToken}`
}
});
}
return next.handle(request);
})
);
}
}
然后,在app.module.ts中的提供者数组中添加FirestoreInterceptor:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { AngularFireModule } from '@angular/fire';
import { environment } from '../environments/environment';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { FirestoreInterceptor } from './firestore.interceptor';
@NgModule({
declarations: [
// ...
],
imports: [
BrowserModule,
HttpClientModule,
AngularFireModule.initializeApp(environment.firebase),
AngularFireAuthModule
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: FirestoreInterceptor,
multi: true
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
现在,当您使用angularfire2/Firestore API进行HTTP请求时,FirestoreInterceptor将自动拦截请求并添加身份验证标头。