angular - Can't send firebase token in HttpInterceptor
问题描述
I've been trying to add a Firebase token to every http request via HttpInterceptor but I can't retrieve the firebase token. When my interceptor runs the user appears as not logged in.
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)
}
}
I tried nesting getIdToken()
inside firebase.auth().onAuthStateChanged()
to check if there was an user logged in but it returns null
.
How can I solve this? thanks in advance!
解决方案
I had to modify my code to use async functions so I can retrieve and wait for the token:
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();
}
}
推荐阅读
- backbone.js - 将下划线模板转换为 Handlebar 模板
- arrays - 试图为游戏井字游戏制作移动列表
- linux - Tails -f 使用多个管道对数据进行排序
- reactjs - 重新加载页面时,材料文本字段标签被剪切
- android - FirebaseAnalytics setCurrentScreen W/FA:没有活动活动时无法调用 setCurrentScreen
- c# - c# 获取所有属性值
- postman - Postman.setNextRequest() 无法传递请求 ID
- python - 在匹配列名下的excel中附加数据
- tcl - 为什么文件名没有正确打印
- sql - 如何从表中选择信息,如果第二个表有重复的行,因此结果相乘