初学者修补连接到 Firebase RTDB 并尝试实现 App Check 的 Angular 应用程序。我希望我错过了一些简单的东西......
在 Firebase 控制台 > 设置 > 应用检查 > RTDB / 应用检查请求指标 - 我的所有请求都显示为“未验证:过时的客户端请求”
强制执行时,我在尝试读取数据库时在浏览器控制台中收到 401 错误(这是我所期望的,因为我的请求被拒绝了),当未强制执行时,我可以按预期访问 RTDB 和读/写(所以这不是任何数据库安全规则)
版本:Angular CLI:13.2.1
节点:16.12.2
NPM:8.2.1
操作系统:达尔文 arm64
@角/火:7.2.0
Firebase CLI:10.1.4
app.module.ts:
import { AngularFireModule } from '@angular/fire/compat';
import { AngularFireDatabaseModule } from '@angular/fire/compat/database';
import firebase from 'firebase/compat/app';
import { environment } from '../environments/environment';
...
firebase.initializeApp(environment.firebaseConfig)
console.log("FB: " + environment.firebaseConfig.databaseURL)
const appCheck = firebase.appCheck()
appCheck.activate(RECAPTCHA_V3_SITE_KEY)
console.log("TOKEN")
...
imports: [
AngularFireModule.initializeApp(environment.firebaseConfig),
AngularFireDatabaseModule,
]
...
providers: [
{
provide: RECAPTCHA_V3_SITE_KEY,
useValue: environment.appCheckSiteKey
}
数据库读取功能:
getItem(itemUID: string): Observable<PublicItem>{
return this.http.get<PublicItem>(`${this.refURL}/items/${itemUID}/det.json`);
}
在测试时,ng serve --configuration production
我已经(违反建议)在验证码域(是的,我将删除它)以及我正在使用的域中启用了 localhost,但是在使用 firebase 托管时问题仍然存在。在编写数据库之前,我已经在应用程序的另一个区域实现了 recaptcha V3,所有这些似乎都正常工作。
数据库访问在 Firebase 中未强制执行时有效,因此我知道我的环境和数据库读取代码正在工作,我可以在应用检查指标中看到请求,因此我的公共和秘密重新验证密钥在我的应用和 Firebase 中是正确的。当将鼠标悬停在“未验证:过时的客户端请求”的工具提示上时,它说“......通常来自应用程序检查之前的旧版本的 Firebase SDK” - 据我所知,一切都取决于日期...
浏览器控制台中的唯一错误是401: Unauthorized
尝试访问 db URL 以提取数据时。
可悲的是,我糟糕的角度和网络开发技能意味着我有很多不明白的地方,并且仍然从这里和文档中逆向工程解决方案,但两者都缺乏我能理解的步骤......有人能发现任何东西吗?我应该在其他地方调用 appCheck 吗?有没有我在阅读时使用的令牌?越挖越迷失……
谢谢