Я думаю, что нашел способ решить это. Но я не уверен на 100%, является ли это оптимальным решением. Буду признателен, если вы, ребята, можете просмотреть ниже код:
@Injectable({
providedIn: 'root'
})
export class ReqInterceptorService implements HttpInterceptor {
constructor() {}
/*
* Every outgoing Http request will go through this Http interceptor and append
* Authorization nav-header to it.
*/
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
/* Firebase will refresh token automatically if expired */
return from(this.getCurrentIdToken()).pipe(
mergeMap(token => {
console.log(token);
req = req.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
return next.handle(req);
})
)
}
getCurrentIdToken() {
return new Promise((resolve, reject) => {
const auth = firebase.auth();
const unsubscribe = auth.onIdTokenChanged(user => {
unsubscribe();
if (user) {
user.getIdToken().then(token => {
resolve(token);
});
} else {
reject(null);
}
}, reject);
});
}
}