Angular Fire页面刷新后Firebase请求被拒绝

Angular Fire页面刷新后Firebase请求被拒绝,angular,firebase,angularfire2,Angular,Firebase,Angularfire2,我刚刚更新了项目依赖项,包括angular fire、firebase和angular,并注意到用户失去了发出firebase请求的权限。 当用户登录时,一切正常,但在刷新页面后,他收到有关所有firebase订阅的下一个错误: Error: permission_denied at /settings/PERSONAL_OFFER_ACTIVATION_MINUTES: Client doesn't have permission to access the desired data. 下面

我刚刚更新了项目依赖项,包括angular fire、firebase和angular,并注意到用户失去了发出firebase请求的权限。 当用户登录时,一切正常,但在刷新页面后,他收到有关所有firebase订阅的下一个错误:

Error: permission_denied at /settings/PERSONAL_OFFER_ACTIVATION_MINUTES: Client doesn't have permission to access the desired data.
下面是我的登录服务和一些请求的示例:

import firebase from 'firebase/app';
import { AngularFireDatabase } from '@angular/fire/database';
import { AngularFireAuth } from '@angular/fire/auth';

constructor(
    private db: AngularFireDatabase,
    public afAuth: AngularFireAuth
  ) { }

login(firebaseToken: string) {
 return this.afAuth.signInWithCustomToken(firebaseToken);
}

async loginFb() {
    const provider = new firebase.auth.FacebookAuthProvider();
    const result = await this.afAuth.signInWithPopup(provider);
    return result;
  }

  async loginGoogle() {
    const provider = new firebase.auth.GoogleAuthProvider();
    const result = await this.afAuth.signInWithPopup(provider);
    return result;
  }
  
   getPersonalOfferTimer(): Observable<number> {
    return this.db.object(`settings/PERSONAL_OFFER_ACTIVATION_MINUTES`).valueChanges() as Observable<number>;
  }
  
   getMovementsPurchaseTimeout(): Observable<number> {
    return this.db.object(`settings/PURCHASE_MOVEMENTS_TIMEOUT`).valueChanges() as Observable<number>;
  }
从“firebase/app”导入firebase;
从'@angular/fire/database'导入{AngularFireDatabase};
从'@angular/fire/auth'导入{AngularFireAuth};
建造师(
私有数据库:AngularFireDatabase,
公共授权:AngularFireAuth
) { }
登录(firebaseToken:string){
返回此.afAuth.signInWithCustomToken(firebaseToken);
}
异步登录{
const provider=new firebase.auth.FacebookAuthProvider();
const result=等待此.afAuth.signInWithPopup(提供程序);
返回结果;
}
异步登录日志(){
const provider=new firebase.auth.GoogleAuthProvider();
const result=等待此.afAuth.signInWithPopup(提供程序);
返回结果;
}
getPersonalOfferTimer():可观察{
将此.db.object(`settings/PERSONAL\u OFFER\u ACTIVATION\u MINUTES`)返回为可观察的.valueChanges();
}
getMovementsPurchaseTimeout():可观察{
将此.db.object(`settings/PURCHASE\u MOVEMENTS\u TIMEOUT`).valueChanges()返回为可观察对象;
}
基本上,没有什么特别的,在以前的版本中,一切都很好,没有任何问题。据我记忆所及,用户会自动保存,直到他注销并且所有请求都正常工作。现在,用户似乎不再被保存。但我在firebase或angular fire上的版本更改中没有找到任何说明可以处理这个问题

以前的版本是Angular 8、Firebase 5.5.8和Angular Fire 5.1.0


也许有人遇到了相同的问题?

所以在我的例子中,我发现firebase用户加载的时间比其他订阅触发的时间晚了一点。基本上,通过afAuth.authState推送所有订阅将完成这项工作。不理想,但举个小例子:

  getWebState(): Observable<boolean> {
    return this.afAuth.authState
      .pipe(
        switchMap(_ =>
          this.db.object(`settings/BLOCK_WEB_GAME`)
            .valueChanges() as Observable<boolean>
        )
      )
  }
getWebState():可观察{
返回this.afAuth.authState
.烟斗(
开关映射(=>
这个.db.object(`settings/BLOCK\u WEB\u GAME`)
.valueChanges()作为可观察的
)
)
}
我会找到一个更好的实现方法,因为我怀疑在每个请求中从AuthState切换是一个好方法,但是,至少是这样的