Firebase模拟器RTDB规则未生效及默认数据库切换问题
解决Firebase模拟器RTDB规则不生效或Functions默认连接实例问题
针对你遇到的模拟器中RTDB规则仅作用于{PROJECT-NAME}-default-rtdb,但Functions默认连接{PROJECT-NAME}实例导致索引错误的问题,提供两种可行方案:
方案一:为目标RTDB实例单独配置规则
修改firebase.json,使用databases数组为每个RTDB实例单独指定规则文件(可复用同一份规则),替代原有的单个database配置:
{ "databases": [ { "database": "{PROJECT-NAME}", "rules": "database.rules.json" }, { "database": "{PROJECT-NAME}-default-rtdb", "rules": "database.rules.json" } ] }
保存配置后重启Firebase模拟器,规则将同时应用到两个RTDB实例。
方案二:修改Functions默认连接的RTDB实例
方式1:初始化Admin SDK时指定数据库URL
在Functions代码中初始化admin SDK时,明确指定目标RTDB实例的URL(本地模拟器RTDB端口默认是9000):
const admin = require('firebase-admin'); admin.initializeApp({ databaseURL: 'http://localhost:9000?ns={PROJECT-NAME}-default-rtdb' });
这样Functions会默认连接带-default-rtdb后缀的实例,与规则生效的实例保持一致。
方式2:通过环境变量指定默认数据库URL
在Functions的package.json中修改启动脚本,添加FIREBASE_DATABASE_URL环境变量:
"scripts": { "serve": "FIREBASE_DATABASE_URL=http://localhost:9000?ns={PROJECT-NAME}-default-rtdb firebase emulators:start --only functions,database" }
执行npm run serve启动模拟器时,Functions会自动读取该环境变量,连接指定的RTDB实例。
内容的提问来源于stack exchange,提问作者Marco Fedele
相关产品推荐
相关产品推荐

