首页 > 解决方案 > Firestore 规则路径不起作用

问题描述

我正在尝试创建一个功能 i Firestore Rules 来检查授权用户是否是文档的所有者。我已经使用模拟器来测试函数的结果,这是我尝试过的一些事情:

return request.auth.uid == 'fePQ2zznGnh7LkDZXonz' && database == '(default)'

返回

resource.data.user is path

返回

return resource.data.user == path('/databases/(default)/documents/users/fePQ2zznGnh7LkDZXonz')

返回

return resource.data.user == path(/databases/$(database)/documents/users/$(request.auth.uid));

返回

return resource.data.user == path(/databases/$(database)/documents/users/$(userId)).bind({"database": database, "userId": request.auth.uid});

返回

我已经阅读了他们关于路径的文档,但我似乎找不到我错过的内容: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.useruid 是否与request.auth.uid. resource.data.user的 firestore 数据库中的数据类型是具有值的文档引用users/fePQ2zznGnh7LkDZXonz

谁能指出我做错了什么?

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


您是否尝试过编写以下规则?

return resource.data.user == /databases/$(database)/documents/users/$(request.auth.uid)

如果文档已经存储在 Firestore 中,这应该可以工作。如果要验证经过身份验证的用户只写属于他的文档,则必须在“请求”中进行检查:

request.resource.data.user

推荐阅读