【问题标题】:Questions on Firebase realtime database auth rules关于 Firebase 实时数据库身份验证规则的问题
【发布时间】:2020-04-29 06:40:25
【问题描述】:

我正在 Firebase 上编写一个微博网站,我对这个网站很陌生。我正在存储用户信息(例如介绍、个人资料图片)并发布用户写的如下结构:

{
  "posts" : {
    "postid" : {
      "category": "xx",
      "content": "xx",
      "uid":"xx"
  }
  },
  "users" : {
    "uid" : {
      "intro" : "xx",
      "nickname" : "xx",
      "profile_picture" : "xx"
      }
  }
}

我想制定以下规则:

  1. 任何已登录的用户都可以发帖,但之后只能编辑自己的帖子

  2. 对于用户信息,他们只能发布/编辑自己的信息。

我设置了如下的数据库安全规则。

"users": {
  ".read": true,
  "$uid": {
      ".write": "auth.uid===$uid"
  },
},
"posts": {
  ".read": true,
  ".write": "auth!==null",
},

这里有几个问题:

一个。此规则将允许任何不良用户编辑不属于他/她自己的任何其他帖子。

b.尝试写入用户节点时,目前没有现有的 UID 子节点,并且用户被拒绝写入权限。

如何更改数据库规则来解决这两个问题?我的偏好是在不重写前端代码或更改数据库结构的情况下这样做......很想在这里寻求一些建议!

【问题讨论】:

  • 您已在问题中包含指向 JSON 树和安全规则图片的链接。请用实际的 JSON 和规则作为文本替换它。对于 JSON,您可以通过单击 your Firebase Database console 的溢出菜单 (⠇) 中的 Export JSON 链接轻松获取此信息。将 JSON 和规则作为文本使其可搜索,使我们能够轻松地使用它们来测试您的实际数据和规则,并在我们的答案中使用它们,一般来说这是一件好事。
  • 嗨@FrankvanPuffelen,感谢您对网络开发新手的建议。我按照您的建议更改了内容。你能看看吗?谢谢!

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

要只允许用户写自己的帖子(或使用自己的 UID 创建新帖子),您可以在写操作中检查 uid 字段的值:

"posts": {
  ".read": true,
  ".write": "auth !== null && auth.uid === newData.child('uid').val",
},

【讨论】:

  • 谢谢!!很高兴知道这个规则。 :)
  • 还有一个问题...解决问题 b) 的“用户”节点的数据库规则是什么?湾。尝试写入用户节点时,目前没有现有的 UID 子节点,并且用户被拒绝写入权限。我一直在寻找 firebase 文档,但想不出答案……:(
  • 这似乎不太可能。您对/users/$uid 的原始规则和我对/posts 的规则都检查正在写入的新数据。如果您在完成这项工作时遇到问题,请编辑您的问题以包含编写代码的实际代码。虽然我必须说最好为这个问题打开一个新问题。
猜你喜欢
  • 2021-01-22
  • 2019-07-10
  • 2020-09-24
  • 1970-01-01
  • 2018-01-17
  • 2020-05-10
  • 2018-08-25
  • 2021-10-11
  • 2017-12-26
相关资源
最近更新 更多