【问题标题】:Firebase rules and validations for update existing data用于更新现有数据的 Firebase 规则和验证
【发布时间】:2018-01-27 03:09:14
【问题描述】:

我的数据结构如下:

    {
     "users" : {
      "31J59dq1clZ3inHMzoopiigsEg63" : [ {
       "name" : "Lanchana",
       "timestamp" : 1516916245423,
       "uid" : "31J59dq1clZ3inHMzoopiigsEg63",
       "userEmail" : "*****@gmail.com",
       "total-stars" : 123
        } ]
      }
    }

和消防规则如下:

    {
      "rules": {
        "users": {
          "$uid": {
            ".read": "$uid === auth.uid && auth != null",
            ".write": "!data.exists() || data.child('uid').val() == 
                       auth.uid && auth != null",
                }
         }
       }
    }

我可以成功添加新数据,但无法对现有数据进行任何更新。例如:如果我只想根据 uid 更新特定用户的总星数,我该如何指定写入和验证规则?

【问题讨论】:

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


    【解决方案1】:

    您的数据结构似乎有一个层0 是规则中缺失的。如果该层确实存在于您的实际 JSON 中,那么您也希望将它包含在您的规则中:

    {
      "rules": {
        "users": {
          "$uid": {
            "$postid": {
              ".read": "$uid === auth.uid && auth != null",
              ".write": "!data.exists() || data.child('uid').val() == 
                       auth.uid && auth != null",
            }
         }
       }
    }
    

    我在这里调用了层$postid。您可能希望使用更能反映层所代表内容的名称。

    【讨论】:

    • 我添加了 $postId,但它既不能读取也不能写入新的或现有的数据。
    • 在这种情况下,使用导致问题的最小(独立)代码更新您的问题。最好看到实际的 JSON,而不是手动输入的近似值。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。
    • 我更新了实际的 JSON 对象。对不起,我的错它没有零索引。
    • 谢谢。我们仍然缺少失败的代码。以及失败的代码,最好是您收到的错误消息(如果有的话)。
    • 我已将书面写入规则更新为 ".write": "!data.exists() || $uid === auth.uid && auth !== null" 并且它开始工作对于不存在和更新现有数据。感谢所有的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多