有关Firebase实时数据库身份验证规则的问题

时间:2020-01-12 06:41:15

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

我正在为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",
},

这里有几个问题:

a。该规则将使任何不良用户可以编辑非他/她自己的其他任何帖子。

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

如何更改数据库规则来解决这两个问题?我更喜欢这样做,而无需重写前端代码或更改数据库结构...希望在这里寻求一些建议!

1 个答案:

答案 0 :(得分:0)

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

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