【发布时间】:2019-06-30 14:01:02
【问题描述】:
我是 Angular 的新手,所以我想使用 firebase 来存储用户令牌,这些令牌将在调用拦截器以修改请求标头时访问。
我在构造函数和HttpHandler函数中分别添加了firebase函数,
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
private token: any = null;
constructor() {
firebase.database().ref(`currentUserDetails/${localStorage.getItem('sn')}`).once('value', (snap) => {
if(snap.exists()){
this.token = snap.val().token;
}
});
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(this.token) {
request = request.clone({
setHeaders: {
Authorization: this.token
}
});
}
console.log(this.token) // this is null
return next.handle(request)
}
}
问题是intercept 函数在constructor 函数完全执行之前执行。所以,this.token 为空。
我尝试过使用回调函数,尝试过async await 函数,也尝试过堆栈溢出中给出的solution,但没有成功。
有什么办法可以解决这个问题吗?
【问题讨论】: