【问题标题】:How to write Realtime Database basic rules for user based security?如何为基于用户的安全性编写实时数据库基本规则?
【发布时间】:2020-02-12 05:01:21
【问题描述】:

我正在尝试在我的 Firebase 实时数据库中实现基于用户的安全性。

作为一个基本示例,我希望经过身份验证的用户能够从“用户”节点读取/写入他们自己的数据。

我在 Realtime DB 规则模拟器中对此进行了测试,但使用以下参数读取失败:

Location: /users
Authenticated: true
Provider: Anonymous
UID: "aLoBLejDJ5P4PDZkZhe2LTxO8x32" (tried with and without quotation marks)

我得到“模拟读取被拒绝”(虽然没有解释为什么)。 当我尝试读取 REST HTTP GET 请求(“错误:权限被拒绝”)时,也会发生同样的情况。

这是我的数据库结构:

{
  "users" : {
    "-LrAxMc5SANNe-p1Fd6n" : {
      "test" : "lol",
      "uid" : "aLoBLejDJ5P4PDZkZhe2LTxO8x32"
    }
  }
}

这些是目前为止的规则

{
  "rules": {
    "users" : {
      ".indexOn": "date",

      "$uid": {
        ".read" : "$uid === auth.uid",
        ".write" : "$uid === auth.uid",
      }
    }
  }
}

预期的结果是在 HTTP 响应中获取 THAT 用户的数据,而不是我得到了上述权限错误。

作为 Firebase 的新手,我不知道问题出在哪里,如果我理解/实施规则语法错误或其他原因。

此外,与我在 Firebase 文档中看到的示例 uid 相比,我在注册的 HTTP 响应中收到的 uid(上图)看起来有很大不同,不知道这是否是问题的一部分?

目前我的应用程序中唯一的登录方法是电子邮件+密码。

【问题讨论】:

    标签: firebase rest firebase-realtime-database


    【解决方案1】:

    从您提出问题的方式来看,您似乎认为安全规则会自动过滤数据。这不是真的:安全规则只确保用户有权读取他们试图读取的数据。当您附加侦听器时会发生这种情况,并且不会以任何方式基于数据库中的实际数据。

    有关这方面的更多信息,请参阅文档中的 rules are not filters 部分、许多以前的 questions on the topic 中的一些,以及有关 securely querying 的文档。


    您正在尝试阅读/users。由于在我们的规则中没有人对该节点具有读取权限,因此数据库拒绝读取操作。

    要使用当前规则读取当前用户的数据,请从该用户数据的整个路径中读取:

    /users/aLoBLejDJ5P4PDZkZhe2LTxO8x32
    

    要允许从/users 节点读取,您可以将规则修改为:

    {
      "rules": {
        "users" : {
          ".indexOn": "date",
          ".read": "auth.uid != null",
          "$uid": {
            ".write" : "$uid === auth.uid",
          }
        }
      }
    }
    

    但这将允许任何人读取所有用户数据。


    【讨论】:

    • 老实说,我认为 Firebase 的方法非常令人困惑。因为我可以为管理员创建“规则”级别的读取规则,然后为内容创建者创建记录级别,但根据他们的文档,规则越深入,它们就会被忽略。那么如何让管理员阅读所有内容而让创建者只阅读他们自己呢?
    • 如果您有新问题,我建议您打开一个新帖子。但是:更深层次的规则不一定会被忽略,但路径的所有规则都是 OR'ed 在一起的。这意味着一旦您在某个级别上授予访问权限,您就无法在较低级别上将其取消。但是,如果您在某个级别拒绝访问,您可以然后授予较低级别的访问权限。
    猜你喜欢
    • 2017-04-02
    • 2020-12-28
    • 2021-04-11
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多