angular - 在 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
也许有人遇到过同样的问题?
解决方案
因此,在我的情况下,我发现 firebase 用户加载时间稍晚,然后触发了其他订阅。基本上推动所有订阅afAuth.authState
将完成工作。不理想,但一个小例子:
getWebState(): Observable<boolean> {
return this.afAuth.authState
.pipe(
switchMap(_ =>
this.db.object(`settings/BLOCK_WEB_GAME`)
.valueChanges() as Observable<boolean>
)
)
}
会找到一个更好的实现,因为我怀疑在每个请求中从 AuthState 切换是个好方法,但是,至少它是一些东西。
推荐阅读
- javascript - 如何从 ImmutableJS Record 构造函数调用函数
- c# - 如何在不一直打开 Outlook 的情况下开发和测试部分 Outlook 加载项?
- multithreading - 带有 if 语句的 OpenMP 循环仅导致 NaN
- sbt - 我下载了 sbt 1.1.4 但为什么安装了 sbt 0.13?
- ios - 如何快速制作侧边菜单(subSidemenu
- websocket - Websocket 连接。我们为什么要调用 ws://echo.websocket.org?
- c# - 检索赋予方法参数的自定义属性
- php - 没有从android中的改造获得完整的字符串响应
- regex - 搜索带有特殊字符的字符串 linux
- python - TensorFlow - 使用批处理数据验证准确性