无法读取null的'uid'属性

时间:2019-11-12 16:37:39

标签: google-cloud-firestore firebase-authentication ionic4

我需要帮助,我将Firebase用作后端,将Ionic 4用作前端。

我在控制台上出现错误,第一次打开/午餐应用程序时,我收到了无法在控制台上读取'uid'为null的属性

我阅读了一些相关的解决方案,但找不到能解决我问题的解决方案。

以下是我在应用中实现代码后的代码:

initializeApp() {

this.afAuth.auth.onAuthStateChanged(user => {
  const userId = user.uid;
  this.db.doc(`accounts/${userId}`).valueChanges().pipe(
    take(1)
  ).subscribe(userData => {
    const role = userData['role'];
    if (role == 'USER') {
      console.log('we got a customer user');
      this.router.navigateByUrl('/tabs/home')
    } else if (role == 'VENDOR') {
      console.log('we got a seller user');
      this.router.navigateByUrl('/vendor-tabs/home-vendor')
    }
  })
})
}

2 个答案:

答案 0 :(得分:1)

任一用户登录和注销后,将调用身份验证状态更改侦听器。 user如果未登录,则为null。这意味着您必须先检查user是否为真,然后才能访问其上的属性。

this.afAuth.auth.onAuthStateChanged(user => {
  if (user) {
    // user is signed in
    const userId = user.uid;
  }
  else {
    // user is signed out - can't use properties of user.
  }
}

请参见API documentation

答案 1 :(得分:0)

这是我为摆脱'uid'null的无法读取属性所做的事情

this.afAuth.auth.onAuthStateChanged(user => {
  if (user) {
    const userId = user.uid;
    this.db.doc(`accounts/${userId}`).valueChanges().pipe(
      take(1)
    ).subscribe(userData => {
      const role = userData['role'];
      if (role == 'USER') {
        console.log('we got a customer user');
        this.router.navigateByUrl('/tabs/home')
      } else if (role == 'VENDOR') {
        console.log('we got a seller user');
        this.router.navigateByUrl('/vendor-tabs/home-vendor')
      }
    })
  } else {
    return of(null);
  }
})