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

关于Firebase实时数据库身份验证规则的问题,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我在Firebase上编写了一个微博网站,我是新加入的。我存储用户信息(如简介、个人资料图片)和用户写的帖子,结构如下: { "posts" : { "postid" : { "category": "xx", "content": "xx", "uid":"xx" } }, "users" : { "uid" : { "intro" : "xx", "nickname" : "xx", "p

我在Firebase上编写了一个微博网站,我是新加入的。我存储用户信息(如简介、个人资料图片)和用户写的帖子,结构如下:

{
  "posts" : {
    "postid" : {
      "category": "xx",
      "content": "xx",
      "uid":"xx"
  }
  },
  "users" : {
    "uid" : {
      "intro" : "xx",
      "nickname" : "xx",
      "profile_picture" : "xx"
      }
  }
}
我想制定以下规则:

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

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

  • 我设置数据库安全规则如下

    "users": {
      ".read": true,
      "$uid": {
          ".write": "auth.uid===$uid"
      },
    },
    "posts": {
      ".read": true,
      ".write": "auth!==null",
    },
    
    以下是几个问题:

    a。此规则将允许任何坏用户编辑任何其他非他/她自己的帖子

    b。尝试写入用户节点时,此时不存在UID子节点,用户被拒绝写入权限


    如何更改数据库规则以解决这两个问题?我的偏好是这样做而不重写前端代码或更改数据库结构…希望在这里寻求一些建议

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

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

    您的问题中包含了指向JSON树图片和安全规则的链接。请将其替换为实际的JSON和文本形式的规则。对于JSON,您可以通过单击overflow菜单中的Export JSON链接轻松获得它(⠇) 当然。将JSON和规则作为文本让它们可以搜索,让我们可以轻松地使用它们来测试您的实际数据和规则,并在我们的答案中使用它们,这通常是一件好事。您好@FrankvanPuffelen,谢谢您给一位web开发新手的建议。我按照您的建议更改了内容。您能看一下吗?谢谢!谢谢ks!!很高兴了解此规则。:)还有一个问题…解决此问题的“用户”节点的数据库规则是什么?B尝试写入用户节点时,此时不存在UID子节点,用户被拒绝写入权限。我一直在搜索firebase文档,但想不出答案…:(这似乎不太可能。您在
    /users/$uid
    上的原始规则和我在
    /posts
    上的规则都要对照正在编写的新数据进行检查。如果您在这方面遇到困难,请编辑您的问题,以包括实际编写的代码。尽管我必须说,最好针对该问题提出一个新问题。