【问题标题】:Firebase Realtime Database validations rules not workingFirebase 实时数据库验证规则不起作用
【发布时间】:2021-02-27 02:14:24
【问题描述】:

这是我的第一个问题,所以如果我遗漏了一些内容,请告诉我,非常感谢您阅读它。

我有一个具有这种结构的实时数据库:

-transactions
  -uid
    -transaction1...

使用这些规则添加新交易时:

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

这个网址:(我使用的是 REST API)

POST https://{{appName}}.firebaseio.com/transactions/{{userId}}.json?auth={{TOKEN}}

有了这些数据:

{
    "title": "Postman Test",
    "amount": 50,
    "date": "2020-11-15",
    "category": "other"
}

它按预期工作。但是当我添加以下验证时:

{
  "rules": {
    
    "transactions": {
      "$uid":{
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid",
          
        ".validate": "newData.hasChildren(['title','amount'])",
      }
    }
  }
}

它返回以下错误:"error": "Permission denied"

如果我把 !newData.hasChildren(['title', 'amount']) 改为,它可以工作,所以我认为它没有正确读取字段。

我应该提到,当我在 firebase 页面中尝试此规则时,它们会起作用,所以我很困惑。

我已阅读文档并搜索了类似的错误,但我无法修复它,因此非常感谢任何帮助。

非常感谢。

【问题讨论】:

  • 您可以将解决方案添加为该帖子的答案并将其标记为已接受。
  • 好的,谢谢,我会这样做的。

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


【解决方案1】:

我终于找到了解决方案,所以我会在这里发布以防万一有人遇到同样的问题。

当在Firebase Realtime Database 中使用POST 时,它会创建一个具有新自动索引的新节点,因此我只需要添加“$id”(或任何其他名称)字段来说明这一点,如下所示:

{
  "rules": {
    
    "transactions": {
      "$uid":{
        ".read": "auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid",
        
        "$id":{
          
          ".validate": "newData.hasChildren(['amount','category','type','date'])",
            
            "amount": {
                ".validate": "newData.isNumber() && newData.val() >= 0",
            },
            "category": {
                ".validate": "newData.isString()",
            },
            "type": {
                ".validate": "newData.isString()",
            },
            "date": {
                ".validate": "newData.isString()",
            }
            
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 2018-03-12
    • 2018-01-17
    • 2021-01-30
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多