无法在 HttpInterceptor 中发送 firebase 令牌
Can't send firebase token in HttpInterceptor
我一直在尝试通过 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()
中以检查是否有用户登录,但 returns 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();
}
}
我一直在尝试通过 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()
中以检查是否有用户登录,但 returns 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();
}
}