首页 > 解决方案 > 关于 Firebase 实时数据库身份验证规则的问题

问题描述

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

这里有几个问题:

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

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

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

标签: firebasefirebase-realtime-databasefirebase-security

解决方案


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

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

推荐阅读