Swift 模拟器在Firebase中未显示错误,但权限被拒绝
以下是我的规则:Swift 模拟器在Firebase中未显示错误,但权限被拒绝,swift,firebase,firebase-realtime-database,firebase-security,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()",
{
"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中,我添加了错误描述:
在模拟器中出现错误,我可以从我的项目中添加代码,但我认为规则不好。我将依次处理屏幕截图:
/用户名。没有人对/usernames
(仅在其下的特定节点上)具有写入权限,因此写入失败
/usernames/myusername
。但是您正在写入的数据违反了验证规则。您试图编写的是一个JSON对象,而您的规则只允许一个简单的字符串值。所以你可以写“userUID”
,但你不能写{“hello”:“userUID”}
.write
规则旁边的绿色复选标记所示。但是.validate
规则拒绝写入,因为它正在检查字符串(并且您正在发布一个JSON对象)请编辑您的问题,包括1)失败的代码和2)允许相同操作的模拟器屏幕截图。是的,我用一些图片更新了它。这足够了吗?还是我应该发布更多?这是图3:谢谢你的回答。我将JSON改为“某物”。这适用于newData.isString(),但它不会绕过第二条验证规则。请看这张图片:我还更改了UID,所以这不是问题所在。第二条规则有什么问题?该屏幕截图没有显示足够的信息,因为我们在
/users/…
上看不到现有数据。请记住,Firebase控制台中的模拟器不能用于模拟多位置更新。看见