这些是我的规则:
{
"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: 我在路上犯了一个错误。
这是我的第二次尝试,图2:
在图3中,我添加了错误描述:
这在模拟器中出错了,我可以从我的项目添加代码,但我认为规则不好。
答案 0 :(得分:1)
我依次对待屏幕截图:
在屏幕截图1中,您尝试写入/usernames
。没有人对/usernames
具有写权限(仅在其下的特定节点上),因此写入失败。
在屏幕截图2中,您正在写信/usernames/myusername
。但您撰写的数据违反了验证规则。您尝试编写的是JSON对象,而您的规则只允许使用简单的字符串值。所以你可以写"userUID"
,但你不能写{ "hello": "userUID" }
。
在屏幕截图3中,您可以看到您具有写入权限,如.write
规则旁边的绿色复选标记所示。但.validate
规则拒绝写入,因为它正在检查字符串(并且您正在发布JSON对象)。