【问题标题】:How can I apply a validation security rule to the key in Firebase's Realtime Database如何将验证安全规则应用于 Firebase 实时数据库中的密钥
【发布时间】:2022-01-12 21:19:49
【问题描述】:

我在理解 Firebase 实时数据库的验证安全规则时有些困惑。我目前设置数据库的方式如下所示:

(Database ID)
  users
    (Google UID)
      dayRatings
        2022-01-01: 2
        2022-01-02: 4
        2022-01-03: 5
      settings
        (Not implemented yet)
    (Google UID)
      dayRatings
        2022-01-01: 3
        2022-01-02: 1
        2022-01-03: 1
      settings
        (Not implemented yet)

用户可以添加自己的评分,但评分未经过验证。我想验证评级的键(例如2022-01-01)和值,但我对如何对它们执行验证感到困惑,因为键可能会根据用户的选择而有所不同。

目前,我的安全规则只是确保用户只能读取和写入他们自己的文档,但不会以任何方式验证数据。

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

如果密钥不固定,我该如何执行验证?我的数据库结构是否正确?

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    您可以为该日期添加另一个wildcard capture variable

    {
      "rules": {
        "users": {
          "$uid": {
            ".read": "auth != null && auth.uid == $uid",
            ".write": "auth != null && auth.uid == $uid"
            "$date": { // ? capture any child node
              ".validate": "..." // ? validate its value
            }
          }
        }
      }
    }
    

    这里的$date$uid 相同,只是变量名不同,在 JSON 中的级别不同。

    【讨论】:

    • 我可以使用这个验证日期,还是只验证值?
    • 日期在验证规则的内部以$date 的形式提供,并且是一个字符串变量(因为所有键都是数据库中的字符串)。
    猜你喜欢
    • 2021-06-26
    • 2017-04-09
    • 2020-08-08
    • 2021-10-26
    • 1970-01-01
    • 2023-02-13
    • 2022-01-18
    • 2020-12-28
    相关资源
    最近更新 更多