Firebase Rules编写报unknown variable uid错误如何解决
报错根因
Firebase Realtime Database 规则中,不带$前缀的路径段是固定字面量节点名,不会被识别为动态捕获变量。你当前规则里路径层写的"uid"是一个固定叫uid的静态节点,不是能捕获用户ID的通配变量,因此规则表达式里引用uid时,引擎找不到对应变量定义,就会抛出unknown variable uid错误。
修复方法
动态路径变量必须加$前缀声明,把路径中的"uid"改为"$uid",表达式里同步引用$uid即可,修正后可正常运行的规则如下:
{ "rules": { "users": { "$uid": { ".read": true, ".write": "auth != null && auth.uid == $uid" } } } }
规则逻辑说明
- 路径段
$uid是通配捕获符,会匹配/users/路径下的所有子节点,自动把当前匹配到的子节点的key值存入$uid变量供规则表达式调用 - 写入校验逻辑匹配需求:首先校验请求方已完成身份认证(
auth != null),再校验当前认证用户的uid和正在操作的节点key完全一致,从规则层面阻止用户篡改其他用户的数据 - 当前配置的
.read: true代表所有访问者(包括未登录的匿名用户)都可以读取全量用户数据,如果需要收紧读权限,可以把读规则也调整为和写规则一致的鉴权逻辑,仅允许用户读取自身对应节点的数据
内容的提问来源于stack exchange,提问作者Zach Wilcox
相关产品推荐
相关产品推荐

