Firebase实时数据库规则保存失败求助:第2行预期双引号
问题原因与解决方法
你遇到的报错核心是混淆了Firebase Realtime Database和Cloud Firestore的规则语法与配置界面:
1. 报错直接原因
你粘贴的是Cloud Firestore的规则代码,但在Firebase Realtime Database的规则配置页面保存。Realtime Database规则要求严格的JSON格式,而你的代码用了Firestore的规则语法(比如分号、service关键字),不符合JSON规范,所以出现Line 2: Expected '"'(期望双引号)的错误。
2. 分场景解决
场景一:你确实要配置Realtime Database规则
使用符合JSON格式的规则,对应你的需求(用户只能读写自己的用户数据,帖子需验证用户身份且读写权限关联发布者),正确规则如下:
{ "rules_version": "2", "rules": { "users": { "$userId": { ".read": "auth.uid === $userId", ".write": "auth.uid === $userId || (auth.uid !== null && newData.exists())" } }, "posts": { "$postId": { ".read": "auth.uid === data.child('userId').val()", ".write": "auth.uid !== null && (newData.exists() ? auth.uid === newData.child('userId').val() : auth.uid === data.child('userId').val())" } } } }
- JSON格式要求所有键用双引号,键值对用冒号分隔,不能用分号
- Realtime Database用
.read/.write定义权限,通过auth、data、newData等对象判断条件
场景二:你实际想配置Cloud Firestore规则
- 切换到Firebase控制台的Cloud Firestore模块,进入「规则」页面
- 粘贴修正后的规则代码(去掉最外层多余的大括号,Firestore规则不需要外层包裹):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, update, delete: if request.auth.uid == userId; allow create: if request.auth.uid != null; } match /posts/{postId} { allow read, update, delete: if request.auth.uid == resource.data.userId; allow create: if request.auth.uid != null; } } }
内容的提问来源于stack exchange,提问作者XxDestroyerxX
相关产品推荐
相关产品推荐

