Firebase Realtime Database规则如何允许新用户首次登录创建自身用户节点
问题解决方案
核心原因
你当前遇到的无法写入问题,本质是操作路径匹配规则的逻辑问题:Firebase Realtime Database 的规则是优先匹配操作的目标路径,如果你直接对/users路径执行SET操作,会命中/users节点默认的无写入权限规则,不会向下匹配$user_id的子节点规则,所以会被拒绝。
方案1(最优,无需修改原有规则)
直接调整写入逻辑,不要操作/users根路径,改为直接对/users/${当前登录用户的UID}路径执行SET操作即可。你当前的原有规则已经完全支持该操作的权限校验,不会影响原有访问控制逻辑。
方案2(需修改规则,适配必须操作/users路径的场景)
如果你的业务逻辑确实需要对/users路径执行写入操作,可按如下规则修改,完全保留原有单用户数据隔离的访问控制层级:
{ "rules": { "users": { // 仅允许写入的数据只包含当前用户自己的UID节点,不允许修改其他用户数据,也不允许创建其他名称的节点 ".write": "newData.exists() && Object.keys(newData.val()).length === 1 && Object.keys(newData.val())[0] === auth.uid", "$user_id": { // 原有权限逻辑完全保留 ".read": "$user_id === auth.uid", ".write": "$user_id === auth.uid" } } } }
注意:方案2的规则不会开放其他用户节点的修改权限,原有单用户数据隔离的逻辑完全不变。
内容的提问来源于stack exchange,提问作者Anshul Gupta
相关产品推荐
相关产品推荐

