云Firestore规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /admins/{document=**} {
allow read, write: if true;
}
match /{userId}/{document=**} {
allow read, write: if request.auth.uid == userId || get(/databases/$(database)/documents/$(userId)/users/$(request.auth.token.email)).exists;
}
}
}
字符串
详情请参见Cloud Firestore规则Playground
模拟类型:get
位置:/databases/(默认)/documents/cTgy 9 W 6 Zt 2dShSgqig 2 ToeYLEzt 2/products
已验证:True
鉴权负载
{
"uid": "dQkped8ggvUv6iHfI9kVD7Vrnlf2",
"token": {
"sub": "dQkped8ggvUv6iHfI9kVD7Vrnlf2",
"aud": "undefined",
"email": "[email protected]",
"email_verified": false,
"firebase": {
"sign_in_provider": "password"
}
}
}
型
错误
Function [get] called with malformed path: /databases/(default)/documents/cTgy9W6Zt2dShSgqig2ToeYLEzt2/users/[email protected]
型
100d 1xx 1c 1d 1x的字符串
1条答案
按热度按时间hpxqektj1#
您需要将Document路径传递给
get()
方法。正如文档中所解释的:“
get()
和exists()
函数都需要完全指定的文档路径。”与
字符串
你实际上是在传递一个集合路径(3个元素)。
您需要更改数据模型或在
[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
子集合中添加要指向的文档。此外我认为你混淆了
get()
和exists()
函数。get()
方法返回一个没有exists
属性的rules.firestore.Resource
。所以做
get(**path**).exists
是不行的。你应该使用exists()
来检查特定文档是否存在,或者使用get()
通过data
属性来检查特定文档的字段的值。