Firestore:取消订阅valueChanges(用户在注销时获取“缺少权限”)

时间:2017-10-10 15:40:40

标签: 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规则的查询都会失败,并且出现“Missing permissions”错误。

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

非常感谢

1 个答案:

答案 0 :(得分:1)

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。但是,它将确保用户在路由加载之前存在。