注销用户后引发的 AngularFire2 错误



我正在使用 Angularfire2 库登录用户并从 Firebase DB 获取数据,但是当用户点击注销时,以下错误会抛到控制台:

无法读取 null 在行中的属性"uid"

下面是在任务组件的ngOnInit方法的第 2 行引发错误的uid属性:

ngOnInit() {
this.authSub1 = this.auth.authState.subscribe((auth) => {
this.tasksSub = this.af.list(`users/${auth.uid}/tasks`, { preserveSnapshot: true }).subscribe(snapshots => {
snapshots.forEach(snapshot => {
this.tasksArray.push(snapshot.val().name);
});
});
}, (err) => {this.openSnackBar(); console.log(err); });
}

然后我在上面的订阅上调用unsbuscribe以避免ngOnDestroy方法的内存泄漏:

ngOnDestroy() {
this.authSub1.unsubscribe();
}

这是位于主组件上的按钮触发的注销方法(主组件的路由器插座显示上述组件(:

logout() {
this.auth.auth.signOut()
.then(() => { 
this.router.navigateByUrl('/login'); 
})
.catch(function(err) {console.log(err); });
}

找到了!解决方案非常简单:

为了避免用户在用户点击注销时用户 ID 为 null,我只能避免使用authState.subscribe回调参数中的uid,而只是使用新创建的变量,该变量直接从注入的AngularFireAuth服务中存储uidngOnInit

this.userId = this.auth.auth.currentUser.uid;

最新更新