我有一个具有以下安全规则的Cloud Firestore数据库:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /data/{userId=**} {
allow read: if request.auth.uid == userId;
}
}
}
我有一个react应用程序,正在读取一个文档与实时监听器。我得到消息"未捕获的错误在快照监听器:FirebaseError:缺少或不足的权限。">
如果我打印用户。Uid到控制台,是正确的。我已经验证了读取是在用户身份验证之后执行的。用户。uid匹配userId"上述文档。
如果我将Firestore安全规则更改为以下内容,则读取工作没有问题:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /data/{userId=**} {
allow read: if request.auth != null;
}
}
}
如果有任何区别,则使用signInWithCustomToken方法登录用户。规则更改后,似乎没有将正确的uid传递给Firestore请求,但我不明白为什么。有人遇到过这样的问题吗?
按照文档的这一部分
service cloud.firestore {
match /databases/{database}/documents {
// Make sure the uid of the requesting user matches name of the user
// document. The wildcard expression {userId} makes the userId variable
// available in rules.
match /users/{userId} {
allow read, update, delete: if request.auth != null && request.auth.uid == userId;
allow create: if request.auth != null;
}
}
}
应该是{userID}
而不是{userId=**}
,以便能够访问变量