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

Firebase RTDB规则始终返回Unauthorized问题排查求助

问题根源

你的规则中$user_id节点未设置.write权限,Firebase实时数据库默认拒绝所有写入操作,除非明确配置允许。虽然子字段(如Username)配置了.write规则,但父节点的权限会优先阻止整个节点的写入,这就是POST请求返回Unauthorized的核心原因。

解决方案

调整规则,给$user_id节点添加合适的.write权限,同时保留子字段的规则限制,确保数据安全性:

{
  "rules": {
    "Accounts": {
      ".read": "true",
      "$user_id": {
        // 允许创建新用户,或修改已存在且Username与路径ID一致的用户
        ".write": "!data.exists() || data.child('Username').val() === $user_id",
        ".validate": "newData.child('Username').isString() && 
                      newData.child('Password').isString() && 
                      newData.child('Salt').isString() && 
                      newData.child('ExpirationDate').isString() &&
                      // 确保Username与路径的$user_id一致,避免数据不一致
                      newData.child('Username').val() === $user_id",
        "Username": {
          // 禁止修改已存在的Username,仅允许创建时写入
          ".write": "!data.exists() || data.val() === newData.val()"
        },
        "Password": {
          ".write": "newData.exists()"
        },
        "Salt": {
          ".write": "newData.exists()"
        },
        "ExpirationDate": {
          ".write": "newData.exists()",
          ".validate": "newData.isString()"
        },
        "IsVerified": {
          ".write": "newData.exists()",
          ".validate": "newData.isBoolean()"
        },
        "Domains": {
          ".write": "true"
        },
        "ActiveDomain": {
          ".write": "true"
        },
        "VerificationCode": {
          ".write": "!data.exists() || newData.exists()",
          ".validate": "newData.isString()"
        }
      }
    }
  }
}
额外建议
  1. 请求方法修正:Firebase REST API中,设置指定路径的节点应使用PUT方法,而非POST(POST用于生成自动ID的新增操作)。改用PUT请求可确保行为符合预期。
  2. 规则模拟器差异:模拟器可能仅验证单个字段的写入权限,而你的实际请求是写入整个节点,父节点的.write权限缺失导致了实际请求失败,模拟器却显示有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:54:52