首页 > 解决方案 > 在 Angular Fire 上刷新页面后,Firebase 请求被拒绝

问题描述

我刚刚更新了项目依赖项,包括 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或angular fire的版本更改中没有找到任何应​​该处理的描述。

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

也许有人遇到过同样的问题?

标签: angularfirebaseangularfire2

解决方案


因此,在我的情况下,我发现 firebase 用户加载时间稍晚,然后触发了其他订阅。基本上推动所有订阅afAuth.authState将完成工作。不理想,但一个小例子:

  getWebState(): Observable<boolean> {
    return this.afAuth.authState
      .pipe(
        switchMap(_ =>
          this.db.object(`settings/BLOCK_WEB_GAME`)
            .valueChanges() as Observable<boolean>
        )
      )
  }

会找到一个更好的实现,因为我怀疑在每个请求中从 AuthState 切换是个好方法,但是,至少它是一些东西。


推荐阅读