2
是否可以取消订阅valueChanges()? 当我的用户登录,我取他们的用户数据这样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的用户可以读取该用户DATAS ... 所以,当用户注销,每个用户id上的规则查询都会失败,并且出现“Missing permissions”错误。
所以这里是我的问题,我该怎么做? 有没有办法取消订阅查询?
非常感谢
嗨大卫。谢谢。为什么我应该返回一个数组,因为我在查询文档而不是集合?无论如何,我已经尝试过它和Typescript编译失败,因为我的Observable期待一个“用户”类型的数据('用户$:Observable'),我试图给他一个空数组。另外我正在使用Ionic,所以我没有角度路由器。由于我在switchMap中,我们确定Firestore查询不是由authState更改触发的吗?再次感谢(Love the Firecasts) –
Maslow
好点!我更新它允许空值或用户。这取决于你的模板。我建议使用null抑制运算符(?)来解决此问题。 –
对不起大卫。可悲的是,这并没有解决问题。我们告诉查询它现在可以返回null,但仍然会尝试在'users/UID'处获取用户,所以我们仍然会出现“权限不足或不足”的错误。我认为对'authUser'的检查就足够了,但看起来像在FireMap的连接是在switchMap中进行的。也许这是问题?我是否应该在某处捕获错误以避免运行时错误? – Maslow