【问题标题】:Firebase requests denied after page refresh on Angular Fire在 Angular Fire 上刷新页面后,Firebase 请求被拒绝
【发布时间】:2021-05-16 19:56:58
【问题描述】:

我刚刚更新了项目依赖项,包括 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

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

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

    所以在我的情况下,我发现 firebase 用户的加载稍晚一点,然后触发了其他订阅。基本上通过afAuth.authState 推送所有订阅就可以了。不理想,但举个小例子:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多