是否可以取消订阅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”错误。
所以这是我的问题,我应该怎么做? 有没有办法取消订阅查询?
非常感谢
答案 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
。但是,它将确保用户在路由加载之前存在。