处理来自Firebase的注销,而不会收到权限错误

时间:2017-10-20 20:27:52

标签: firebase firebase-realtime-database firebase-authentication angularfire2

在我的Angular / Firebase应用中,我有一个支持登录和注销的用户服务。登录后,我从Angular数据库中检索用户的特定于应用程序的数据。该服务发布一个名为appUser$的可观察对象,其中包含当前用户对象(如果没有人登录,则为null)。事情看起来像这样。当用户登录并退出时,我正在使用switchMap在应用的用户数据的不同观察值之间切换。

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(); }

问题在于即将发生签名,访问数据库中/users节点的权限将丢失,从而生成权限被拒绝的运行时错误。为了解决这个问题,我尝试为Angular Subject创建自己的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(); 
}

但即使我将呼叫延迟到signOut,相同的权限问题仍然存在。即使在this.angularFireDatabase.object切换到switchMap后,Observable.of(null)创建的observable似乎仍然“活着”,而Firebase仍然不满意失去访问它的权限

我可能会以某种方式陷阱或抑制此错误,但是有一些简单的方法来处理这种情况吗?

0 个答案:

没有答案