我尝试在开发过程中同时使用 Firebase Appcheck 和模拟器。我认为 Appcheck 在部署完成后可以工作,但部署后也不起作用。但是,当调试控制台尝试将文件上传到存储时,它会返回以下错误。
FirebaseError: AppCheck: Fetch server returned an HTTP error status. HTTP status: 403. (appCheck/fetch-status-error).
Firebase 存储的 Appcheck :从 Firebase 控制台强制执行 - Appcheck
存储规则如下:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth!=null;
}
}
}
at the top of index.html body
如下: <script>self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
initializeAppCheck(app , {
provider: ReCaptchaV3Provider("My Recaptha V3 Site Key"),
isTokenAutoRefreshEnabled: true,
});
</script>
main.dart
中的代码如下:await FirebaseAppCheck.instance.activate(
webRecaptchaSiteKey: 'My Recaptha V3 Site Key',
);
await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
await FirebaseStorage.instance.useStorageEmulator('localhost', 9199);
如何消除错误?
这篇文章可能有点太晚了。对于其他遇到此问题的人: 我在 flutter 中遇到了同样的错误。该问题与更新本地测试的调试令牌有关。生成令牌后,我建议将其另存为 HTML 文件中的字符串。而不是将标志设置为 true。
我找不到使调试令牌与本地主机模拟器一起使用的方法,因此我只是从服务器端绕过了函数上的 appCheck。
我的代码如下所示,我添加了 NODE_ENV 检查
...
if (process.env.NODE_ENV !== 'production') return true;
try {
await getAppCheck().verifyToken(appCheckToken);
return true;
}
...
NODE_ENV 在 Firebase 函数上暂时自动设置为“生产”。