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

标签 angular firebase angularfire2 google-cloud-firestore

是否可以取消订阅 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 规则的查询都会失败,我会收到“缺少权限”错误。

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

非常感谢

最佳答案

这里是 AngularFire 作者。

您有两个选择。要么为注销的用户返回一个空集,要么使用路由守卫。

返回空集很容易。将 .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。但是,它将确保用户在路由加载之前存在。

关于angular - Firestore : Unsubscribe from valueChanges (user gets "Missing permissions" when signing out),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670729/

相关文章:

ios - Firebase 缓存过期总是和 Debug模式一样

ios - 试图理解 swift 中的异步调用行为和主队列

javascript - 将数据发布到阵列云Firestore中

javascript - 通过http调用获取配置后如何在Angular 7中动态初始化firebase

html - Angular 4 - 顶部导航栏没有锁定在顶部

angular - routerlink 不重新加载组件

javascript - 如何在 Angular 应用程序中包含 Telegram 登录小部件?

使用表单生成器的 Angular 5 验证日期字段

Firebase 存储视频流

AngularFire2 观察者