模拟器在Firebase中未显示任何错误,但权限被拒绝

时间:2017-02-13 19:19:56

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

这些是我的规则:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid",
        "username": {
      ".read": true,
          ".write": "!data.exists() && newData.exists()",
          ".validate": "newData.isString()"
        }
      }
    },
    "usernames": {
      "$username": {
        ".read": true,
        ".write": "!data.exists() && newData.exists()",
        ".validate": "newData.isString() && newData.val() == newData.parent().parent().child('users/' + auth.uid + '/username').val()"
      }
    }
  }
}

但是,在模拟器中我看到一个错误,但不是错误发生的那一行。我只是看到"写拒绝"。在XCode中的模拟器中执行此操作时,我看到"权限被拒绝"。我想检查给定的用户名是否唯一,就是全部。

编辑:

也许我不太清楚。模拟器 显示错误,但不显示错误。然而这是我的错误。见图1: Picture 1我在路上犯了一个错误。

这是我的第二次尝试,图2: picture 2

在图3中,我添加了错误描述: picture 3

这在模拟器中出错了,我可以从我的项目添加代码,但我认为规则不好。

1 个答案:

答案 0 :(得分:1)

我依次对待屏幕截图:

  1. 在屏幕截图1中,您尝试写入/usernames。没有人对/usernames具有写权限(仅在其下的特定节点上),因此写入失败。

  2. 在屏幕截图2中,您正在写信/usernames/myusername。但您撰写的数据违反了验证规则。您尝试编写的是JSON对象,而您的规则只允许使用简单的字符串值。所以你可以"userUID",但你不能写{ "hello": "userUID" }

  3. 在屏幕截图3中,您可以看到您具有写入权限,如.write规则旁边的绿色复选标记所示。但.validate规则拒绝写入,因为它正在检查字符串(并且您正在发布JSON对象)。