You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Firebase Realtime Database规则仅允许指定邮箱用户访问

安全规则失效根因
  • 权限继承逻辑错误:Firebase Realtime Database 规则遵循权限一旦在父节点授予,子节点无法撤销的原则,你第一版规则在根节点直接配置了.read: auth != null、.write: auth != null,等于给所有登录用户开放了全库读写权限,子路径的限制规则完全不会生效。
  • 白名单校验逻辑错误:第二版规则的写入校验取了newData.child('email')的字段值,不仅会因为写入节点无email字段直接报错,还存在被用户提交伪造邮箱字段绕过校验的风险,正确逻辑应该直接取登录态的auth.token.email做校验。
  • 规则结构不完整:第二版规则没有配置统一的全局读权限,不同业务节点的权限逻辑没有对齐。
白名单方案规则配置(推荐,便于后续新增授权邮箱)

前置操作

先在数据库根节点创建whitelist节点,授权邮箱的.替换为%2E作为key,value设为true,示例结构:

{
  "whitelist": {
    "augustomarce100@hotmail%2Ecom": true,
    "other-admin@example%2Ecom": true
  }
}

后续新增授权邮箱直接往whitelist节点加对应记录即可,无需修改规则。

完整规则代码

{
  "rules": {
    // 全局读权限:所有登录用户可访问全库数据
    ".read": "auth != null",
    // 全局默认关闭写权限,仅在子节点单独开放
    ".write": false,

    // 白名单节点权限:仅已在白名单内的用户可修改白名单
    "whitelist": {
      ".read": true,
      ".write": "root.child('whitelist').child(auth.token.email.replace('.', '%2E')).exists()"
    },

    // 你的业务节点权限配置,所有需要开放写权限的节点都可以复用该逻辑
    "registries": {
      "$uid": {
        "user": {
          ".write": "root.child('whitelist').child(auth.token.email.replace('.', '%2E')).exists()"
        }
      }
    }
  }
}

如果需要更高安全性,可以在校验逻辑中加auth.token.email_verified === true,限制仅邮箱验证通过的白名单用户可写入。

单管理员硬编码方案(无需白名单节点,适合仅固定1个授权用户的场景)

如果不需要动态新增授权用户,可以直接用简化版规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null && auth.token.email === 'augustomarce100@hotmail.com'"
  }
}
校验方法

直接使用Firebase控制台自带的「规则游乐场」功能,分别模拟白名单用户、普通用户的读写请求,验证权限是否符合预期即可。前端代码无需做修改,所有权限控制以数据库规则为准。

内容的提问来源于stack exchange,提问作者Augusto Marcelo Galarza Covarr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:39:04