Firebase多实时数据库Admin自定义声明权限异常问题
问题排查与解决
1. 修正安全规则的语法错误
你提供的安全规则存在JSON语法问题:"admin_controller"节点定义末尾的多余逗号会导致规则解析失败,部分数据库可能因此无法正确应用配置, fallback到默认权限逻辑。
修正后的正确规则如下:
{ "rules": { ".read": true, "admin_controller": { ".write": "auth.uid !== null && auth.token.admin === true" } } }
请确保所有9个数据库都部署了修正后的规则,部署后可通过Firebase控制台的「规则模拟器」测试admin用户的写入权限是否生效。
2. 验证所有数据库的规则部署状态
即使你认为规则配置一致,仍需逐个确认每个数据库的规则:
- 进入Firebase控制台,打开每个实时数据库的「规则」标签页
- 核对规则内容与修正后的版本完全匹配
- 若存在差异,重新部署正确规则
3. 确认客户端多数据库实例的连接逻辑
操作多个实时数据库实例时,客户端必须明确指定目标数据库的URL,否则会默认连接到项目的默认数据库:
// 示例:连接第二个数据库实例 const secondDatabase = firebase.database('https://your-second-db-id.firebaseio.com/'); // 写入admin_controller节点 secondDatabase.ref('admin_controller').set({/* 数据内容 */}) .then(() => console.log('写入成功')) .catch(err => console.error(err));
确保客户端操作对应数据库时,使用的是该数据库的正确URL初始化的实例。
4. 强制刷新用户ID Token
自定义声明设置后,用户的现有ID Token不会自动包含新声明,需要强制刷新:
- 客户端调用
firebase.auth().currentUser.getIdToken(true)获取刷新后的Token - 确保后续数据库操作使用的是最新的Token
内容的提问来源于stack exchange,提问作者kwankwan
相关产品推荐
相关产品推荐

