Firebase实时数据库规则报错:auth对象属性访问无效如何解决?
解决Firebase实时数据库规则中auth对象的无效属性访问问题
问题根源
报错Invalid property access on 'auth' object是因为Firebase实时数据库规则不允许通过动态变量索引(比如auth[xxx])访问auth对象的属性。用户的自定义Claims(扩展的用户认证信息)必须通过auth.token.字段名的方式直接访问,不能用变量作为属性键。
原代码逻辑修正
你的Bolt代码中,auth[parent_uuid].projectUuid这类写法不符合规则语法,同时部分逻辑的判断方向存在混淆。调整后的核心逻辑是:通过用户自定义Claims中的projectUuid和projectParentUuid字段,匹配当前项目ID或父项目ID,以此判断访问权限。
修正后的Bolt代码
path /projects { read() { false } write() { false } /{project_uuid} { read() { projectMatch(project_uuid, this.parent_uuid) } } } function projectMatch(project_uuid, parent_uuid) { return ( // 若当前项目有父项目ID,且用户所属项目等于该父项目ID (parent_uuid != null && auth.token.projectUuid == parent_uuid) || // 用户直接属于当前项目 (auth.token.projectUuid == project_uuid) || // 用户的父项目ID等于当前项目ID (auth.token.projectParentUuid == project_uuid) ); }
关键注意事项
- 自定义Claims配置:必须通过Firebase Admin SDK为用户设置
projectUuid和projectParentUuid这两个自定义Claims字段,否则规则会因字段不存在而返回false。示例Admin SDK代码(Node.js):
admin.auth().setCustomUserClaims(uid, { projectUuid: "你的项目ID", projectParentUuid: "父项目ID(可选)" });
- 规则语法规范:Firebase实时数据库规则中,auth对象的属性只能是已知的固定字段(如
auth.uid、auth.token.email)或你自定义的Claims字段,禁止使用动态表达式作为属性键。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

