Firebase App Check部署后出现reCAPTCHA错误及权限问题排查
下面是针对你遇到的生产环境reCAPTCHA错误及权限不足问题的排查方向:
检查reCAPTCHA Enterprise站点密钥的域名白名单
登录GCP控制台,找到创建的reCAPTCHA Enterprise站点密钥,确认已将**生产环境的完整域名(含子域名)**添加到允许列表中。注意域名要精确匹配,比如example.com和www.example.com需分别添加,不能带斜杠或多余字符。验证Firebase App Check的reCAPTCHA配置
进入Firebase控制台的App Check页面,确认Web应用关联的是正确的reCAPTCHA Enterprise密钥(不是普通reCAPTCHA密钥),且已启用生产环境的App Check保护,而非仅调试模式。确认生产站点的HTTPS协议
reCAPTCHA Enterprise生产环境强制要求站点使用HTTPS(localhost除外),如果你的部署站点是HTTP协议,必然会触发验证失败。检查Firestore安全规则的App Check验证逻辑
权限不足错误是因为请求未通过App Check验证,被安全规则拦截。确保你的Firestore规则中包含App Check验证逻辑,示例:// 基础验证:确保请求携带有效App Check令牌 allow read, write: if request.app != null; // 严格验证:限定为你的Firebase应用 allow read, write: if request.app.appId == "你的Firebase应用ID";若规则中未加入App Check验证,即使App Check本身正常,也会触发权限错误。
确认代码初始化顺序
确保App Check的初始化代码在Firebase应用初始化之后、所有Firestore请求之前执行,示例:import { initializeApp } from "firebase/app"; const firebaseApp = initializeApp(你的Firebase配置); // 先初始化App Check import { initializeAppCheck, ReCaptchaEnterpriseProvider } from "firebase/app-check"; initializeAppCheck(firebaseApp, { provider: new ReCaptchaEnterpriseProvider('你的reCAPTCHA Enterprise站点密钥'), isTokenAutoRefreshEnabled: true }); // 再初始化Firestore并发起请求 import { getFirestore, getDocs, collection } from "firebase/firestore"; const db = getFirestore(firebaseApp); // 后续的Firestore查询操作若Firestore请求先于App Check初始化,请求将不会携带App Check令牌,导致验证失败。
查看浏览器控制台的详细错误日志
在生产环境打开浏览器开发者工具,查看Console面板的详细报错信息,reCAPTCHA通常会输出具体的失败原因(如域名不匹配、密钥无效、API调用失败等),帮助定位问题。检查GCP的reCAPTCHA Enterprise API配额
登录GCP控制台的reCAPTCHA Enterprise API页面,确认是否存在配额耗尽的情况,若请求次数超出免费配额限制,也会导致验证失败。
内容的提问来源于stack exchange,提问作者Lakshmi

