我正在尝试创建一个功能,即Firestore Rules,以检查授权用户是否是文档的所有者。我已经使用模拟器来测试功能的结果,这是我尝试过的一些事情:
return request.auth.uid == 'fePQ2zznGnh7LkDZXonz' && database == '(default)'
返回 true
resource.data.user is path
返回 true
return resource.data.user == path('/databases/(default)/documents/users/fePQ2zznGnh7LkDZXonz')
返回 true
return resource.data.user == path(/databases/$(database)/documents/users/$(request.auth.uid));
返回 false
return resource.data.user == path(/databases/$(database)/documents/users/$(userId)).bind({"database": database, "userId": request.auth.uid});
返回 false
我已经阅读了他们关于path的文档,但似乎找不到我想念的东西:https://firebase.google.com/docs/reference/rules/rules.Path
在模拟器中,我输入了以下内容
Simulation type: get
location: /servers/6CKqA8ifVsRW3NNww3WF
authentication: true
provider: custom
payload: {
"uid": "fePQ2zznGnh7LkDZXonz",
"token": {
"sub": "",
"aud": "h4hosting-6f5c8",
"firebase": {
"sign_in_provider": "custom"
}
}
我要检索的是检查resource.data.user
的uid是否与request.auth.uid
相同。 Firestore数据库中resource.data.user
的数据类型是值为users/fePQ2zznGnh7LkDZXonz
有人能指出我做错了什么吗?
答案 0 :(得分:0)
您是否尝试编写以下规则?
return resource.data.user == /databases/$(database)/documents/users/$(request.auth.uid)
如果文档已经存储在Firestore中,则此方法应该起作用。 如果要验证通过身份验证的用户只写属于他的文档,则必须在“请求”中进行检查:
request.resource.data.user