Firebase验证规则无效

时间:2017-09-30 21:53:54

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

我是使用Firebase规则的新手,但我已经阅读了文档。我知道最重要的规则优先,但验证规则仍应运行。我的问题是我正在尝试创建唯一的用户名,但每当我模拟插入时,验证永远不会运行。我想要创建的验证规则应该检查用户名的集合并查看它是否已经存在,如果存在则写入失败。 我在下面发布了我的数据结构和规则。 fire_uid是火基地生成的uid的占位符

当前数据库

{
  "userProfile" : {
    "fire_uid" : {
      "email" : "m@matt.com",
      "name" : "matt maxton"
    },
    "fire_uid" : {
      "email" : "v@victor.com",
      "name" : "victor tictor"
    }
  },
  "usernames" : {
    "testcaseusername" : "fire_uid"
  }
}

Firebase规则

{
    "rules": {
        "$uid": {
            ".write": "auth !== null",
            ".read": "auth !== null && auth.provider === 'password'",
            "usernames": {
                ".validate": "!root.child('usernames').child(newData.val()).exists() ||root.child('usernames').child(newData.val()).val() == $uid "
            }
        }
    }
}

模拟测试(我确保此测试中的用户ID与用于在数据库中创建条目的uid不同

  

location:/ usernames

     

Json Data:{“testcaseusername”:“fire_uid”}

1 个答案:

答案 0 :(得分:0)

您的验证规则位于/$uid/usernames。但是你的JSON有/userProfile/$uid/name。要验证后者中的用户名,请使用:

{
    "rules": {
      "userProfile":
        "$uid": {
            ".write": "auth !== null",
            ".read": "auth !== null && auth.provider === 'password'",
            "name": {
                ".validate": "!root.child('usernames').child(newData.val()).exists()
                             ||root.child('usernames').child(newData.val()).val() == $uid "
            }
        }
      }
    }
}