【问题标题】:How to write Rules condition based on input data in Firebase Realtime Database如何根据 Firebase 实时数据库中的输入数据编写规则条件
【发布时间】:2020-12-21 23:50:10
【问题描述】:

我有一个以预测结构写入的 Firebase 实时数据库。

有没有办法使用规则验证已验证用户的 UID 是否匹配其中一个数据输入值?

I know it is possible to validate this using values from the tree structure,但就我而言,我想将 UID 与输入 JSON 中的数据进行比较。


例如,在我的例子中,输入数据是以下 JSON 数据结构:

{ "UserID": "SOME_UID", "UserName": "SOME_USERNAME", "CompletionMoves": 3, "CompletionTime": 12.345 }

它被发布到一个位置,其中包括一个级别名称,然后是用户的 UID,类似于/Level3/SOME_UID。

我想验证用户的 UID 是否等于数据中 UserID 的值。

我想尝试以下规则逻辑,但由于某种原因在 uid 比较行上的测试失败:

{
  "rules": {
    "$level": {
      "$uid" : {
            ".read": "auth != null",
                    ".write": "auth != null 
                    && newData.child($level).child($uid).child('UserID').val() == auth.uid",
      }
    }
  }
}

有人知道我错过了什么吗?提前致谢!

【问题讨论】:

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


    【解决方案1】:

    安全中的newData 和data 变量是声明规则的节点上的(新)数据的快照。所以你不需要构建UserID的整个路径,直接引用即可。

    所以而不是:

    && newData.child($level).child($uid).child('UserID').val() == auth.uid",
    

    用途:

    && newData.child('UserID').val() == auth.uid",
    

    【讨论】:

      【解决方案2】:

      试试 '.child(auth.uid)',而不是 '.child($uid)'。

      这对我有用(如果我正确理解了您的问题)。

      【讨论】:

        猜你喜欢
        • 2019-10-11
        • 2020-11-25
        • 2020-03-04
        • 2018-08-27
        • 2020-12-28
        • 1970-01-01
        • 2018-07-22
        • 1970-01-01
        • 2021-01-31
        相关资源
        最近更新 更多