【问题标题】:Cloud Firestore rules issueCloud Firestore 规则问题
【发布时间】:2021-06-21 15:34:04
【问题描述】:

我有一个 all 应用程序,我可以动态地将内容输入到列表中,这些内容存储在 cloud firestore 的数据库中,每个项目都有一个名称和一个 userId。在我的应用程序中,我完成了所有身份验证,一切正常,每次我在列表中输入内容时,每个项目都有相应用户的 userId。问题是我正处于最后阶段,我希望每个用户都有自己的列表,并且无法访问另一个用户的列表,反之亦然。所以我正在更改数据库规则,但遇到了问题。在我的列表中输入东西时,这些东西会添加到数据库中,并带有它们各自的名称和用户 ID,但它们不会出现在应用程序中!它没有显示应用程序中的项目,但项目存在于数据库中。

更新:已解决!

【问题讨论】:

  • 如果您解决了这个问题,请考虑添加答案。

标签: reactjs database firebase google-cloud-firestore


【解决方案1】:

安全规则中的函数matchesUser()有问题。您将不正确的值 request.resource.data 传递给函数。而不是你必须通过 resource.datarequest.resource.data 变量包含文档的未来状态,resource.data 包含文档的当前状态。

代码应该是

allow read: if authed() && matchesUser(resource.data);

【讨论】:

  • 我改变了它,同样的错误不断发生:/
【解决方案2】:

您的代码有一些错误。根据您的代码,您尝试从集合shows 访问整个文档,而不管用户是谁。 Firebase 安全规则将明确否认这一点。根据规则,用户只能访问自己的数据并记住 Firebase 安全规则不是过滤器。

所以代码应该是

db.collection('shows').where('userId','==',uid_of_the_user)
.orderBy('timestamp').onSnapshot((snapshot)=>...)

【讨论】:

  • 好的,我这样做了,同样的问题仍然存在,可能在代码中也是如此。我对firebase真的很陌生,所以我很难将它实施到我的应用程序中:/
  • 你尝试过什么?可以分享一下代码吗?
猜你喜欢
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
相关资源
最近更新 更多