6 firebase firebase-authentication firebase-realtime-database angularfire2
在我的Angular/Firebase应用程序中,我有一个支持登录和注销的用户服务.登录后,我从Angular数据库中检索用户的特定于应用程序的数据.该服务发布一个appUser$包含当前用户对象的可观察对象(或者null,如果没有人登录).事情看起来像这样.switchMap当用户登录并退出时,我正在使用不同的observable切换我的应用程序的用户数据.
constructor(
private angularFireAuth: AngularFireAuth,
private angularFireDatabase: AngularFireDatabase
) {
this.appUser$ = this.angularFireAuth.authState
.map(user => user && user.uid)
.switchMap(uid => uid ? this.angularFireDatabase.object(`/users/${uid}`) :
Observable.of(null);
}
signOut() { return this.angularFireAuth.auth.signOut(); }
Run Code Online (Sandbox Code Playgroud)
这样做的问题是即时签出发生,访问/users数据库中节点的权限丢失,生成权限被拒绝的运行时错误.为了解决这个问题,我尝试Subject为Angular 创建自己的,User并在调用之前将其归零signOut.我认为这会触发switchMap并以某种方式取消先前用户的应用数据可观察的待处理对象,从而防止权限被拒绝错误.
user$: Subject;
constructor(
private angularFireAuth: AngularFireAuth,
private angularFireDatabase: AngularFireDatabase
) {
this.angularFireAuth.authState.subscribe(this.user$);
this.appUuser$ = this.user$
.map(user => user || user.uid)
.switchMap(uid => uid ? this.angularFireDatabase.object(`/users/${uid}`) :
Observable.of(null);
}
signOut() {
this.user$.next(null);
return this.angularFireAuth.auth.signOut();
}
Run Code Online (Sandbox Code Playgroud)
但即使我延迟拨打电话,相同的许可问题仍然存在signOut.似乎不知何故,this.angularFireDatabase.object即使switchMap应该切换到之后,创建的observable 仍然"活着" Observable.of(null),而Firebase仍然不满意失去访问它的权限.
我可以以某种方式陷阱或抑制此错误,但是有一些简单的方法来处理这种情况吗?
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |