Firestore:取消订阅 valueChanges(用户退出时获得 "Missing permissions")

Firestore: Unsubscribe from valueChanges (user gets "Missing permissions" when signing out)

是否可以取消订阅 valueChanges() ? 当我的用户登录时,我会像这样获取他们的用户数据

this.user$ = this.afAuth.authState.flatMap(authUser => {
  if (!authUser) {
    this.user = null;
    return Observable.of(this.user);
  }

  return this.db.doc<UserServerData>(`users/${authUser.uid}`)
    .valueChanges()
    .map(user => new User(authUser.uid, user));
});

当然我在 Firestore 上有一条规则说只有具有特定 ID 的用户才能读取此用户数据... 因此,当用户注销时,每个使用用户 ID 规则的查询都会失败,我会收到 "Missing permissions" 错误。

所以这是我的问题,我应该怎么做? 有没有办法取消订阅查询?

非常感谢

这里是 AngularFire 作者。

你有两个选择。 return 用于注销用户的空集或使用路由守卫。

返回空集很容易。将 .of(null) 替换为空数组。

this.user$ = this.afAuth.authState.switchMap(authUser => {
  if (!authUser) {
    this.user = null;
    return Observable.of(null);
  }
  return this.db.doc<UserServerData | null>(`users/${authUser.uid}`)
    .valueChanges()
    .map(user => new User(authUser.uid, user));
});

Using a route guard is a bit more complicated 并且需要对 @angular/router 的依赖。但是,它将确保用户在路由加载之前存在。