0

我有一个 Angular 管道,它在导航到特定路线之前检查用户是否是高级会员。

高级后卫:

return this.afAuth.authState.pipe(
  take(1),
  switchMap(user => {
    return this.db.getUserWithKey(user.uid)
  }),
  map((profile) => {
    if (profile.length && profile[0].premium) {
      return true
    } else {
      location.href = "https://url.com";
      return false;
    }
  })
)

但是由于没有登录用户,我总是在控制台中遇到很多错误user is null。我如何检查用户之前是否登录过?

以下不起作用:

return this.afAuth.authState.pipe(
  take(1),
  switchMap(user => {
    if (!user || user == null) {
      return false;
    }
    return this.db.getUserWithKey(user.uid)
  }),
  map((profile) => {
    if (profile.length && profile[0].premium) {
      return true
    } else {
      location.href = "https://url.com";
      return false;
    }
  })
)

你有别的想法吗?提前致谢!

4

1 回答 1

0

您的最后一种方法不起作用,因为switchMap如果用户为空,您将返回 false,并且您希望稍后像profile变量一样使用它。

最简单快捷但不优雅的解决方案是在 switchMap 中返回一个空数组或[{premium: false}]数组而不是 false。

于 2020-06-24T17:27:26.257 回答