注销用户后抛出AngularFire2错误

时间:2017-08-02 10:18:36

标签: angular angularfire2 angular-router

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

  

无法在行

读取null的属性'uid'

以下是uid属性,在任务组件的ngOnInit方法的第2行抛出错误:

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); });
}

1 个答案:

答案 0 :(得分:0)

发现它!解决方案非常简单:

当用户点击注销时,为了避免用户id为null我只需要避免使用uid回调参数中的authState.subscribe,而只使用新创建的变量来存储{ {1}}直接来自uid上注入的AngularFireAuth服务:

ngOnInit