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

Firebase规则auth.token.email失效:模拟写入被拒绝问题排查

排查Firebase数据库规则「Simulated write denied」问题

我来帮你捋捋这个问题!你设置的规则思路是对的——只允许用户写入和自己邮箱匹配的数据,但出现「Simulated write denied」大概率是细节没处理到位,咱们逐个排查:

1. 先修正规则的JSON语法错误

你给出的规则里有个多余的逗号("c":{...},末尾的逗号),虽然部分JSON解析器会容忍,但Firebase的规则引擎可能因此解析异常,先把这个问题Fix掉:

{
  "rules": {
    "c": {
      ".write": "newData.child('email').val() === auth.token.email"
    }
  }
}

2. 模拟测试时的认证信息是否正确配置

这是最容易踩坑的点!很多人在规则 playground 里测试时,忘了设置匹配的认证邮箱:

  • 打开规则测试面板后,切换到「Authentication」标签
  • 选择「Custom」认证类型,添加email字段,填入你要测试的邮箱(比如test@example.com)
  • 回到「Write」标签,设置写入路径为/c,写入的数据必须包含email字段,且值和上面的认证邮箱完全一致(注意大小写敏感,Test@Example.com和test@example.com会被判定为不同)

3. 确认规则的作用范围是否符合你的需求

你的规则是给整个/c节点设置写入权限,这意味着:

  • 任何对/c的写入(新增或覆盖)都必须携带email字段,且和当前用户的邮箱匹配
  • 如果是给/c的子节点(比如/c/user1)写入,当前规则不会生效,你需要调整规则层级(比如把规则移到c/$userId下)

补充注意事项

  • auth.token.email仅在用户通过邮箱密码登录、或第三方登录(如Google)且授权了邮箱权限时才会存在;匿名登录时该字段为null,规则会直接拒绝写入
  • 如果你需要支持修改操作(比如只允许用户修改自己的数据),可以补充对oldData的判断,比如:
    ".write": "newData.child('email').val() === auth.token.email && oldData.child('email').val() === auth.token.email"
    

按照上面的步骤调整后,再去模拟写入应该就能正常通过了!

内容的提问来源于stack exchange,提问作者Midhilaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:17:22