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
的依赖。但是,它将确保用户在路由加载之前存在。
是否可以取消订阅 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
的依赖。但是,它将确保用户在路由加载之前存在。