Firebase 如何只允许向实时数据库添加新条目?
我有一组联系人(订户): 我现在需要一个安全规则,允许匿名用户添加新条目,但不读取或更新现有条目 我目前使用此规则,但它似乎还允许更新现有条目以及覆盖整个“联系人”集合:Firebase 如何只允许向实时数据库添加新条目?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有一组联系人(订户): 我现在需要一个安全规则,允许匿名用户添加新条目,但不读取或更新现有条目 我目前使用此规则,但它似乎还允许更新现有条目以及覆盖整个“联系人”集合: { "rules": { "contacts": { ".read": false, ".write": "newData.exists()" } } } 我也试过!data.exists()但这似乎完全限制了写入访问。您当前的规
{
"rules": {
"contacts": {
".read": false,
".write": "newData.exists()"
}
}
}
我也试过
!data.exists()
但这似乎完全限制了写入访问。您当前的规则适用于整个联系人节点。因此,如果存在任何数据,您将无法添加任何其他内容
您需要做的是在您的规则中添加一个额外的层,如下所示:
{
"rules": {
"contacts": {
// This is the wildcard that represents the user uid
"$user_id": {
".read": false,
".write": "!data.exists()"
}
}
}
}
另请查看有关的文档。您当前的规则适用于整个联系人节点。因此,如果存在任何数据,您将无法添加任何其他内容 您需要做的是在您的规则中添加一个额外的层,如下所示:
{
"rules": {
"contacts": {
// This is the wildcard that represents the user uid
"$user_id": {
".read": false,
".write": "!data.exists()"
}
}
}
}
另外,请查看有关的文档。请包括firebase数据库中的数据结构以及用于编写的代码。我已更新了上面的集合,以实际匹配firebase的json导出。我只通过模拟器进行测试,因为我还没有访问客户端的权限。根据上述规则,对
联系人
和联系人/-LHi-8bIG4xaZADdc9mf
的“写入”都会成功或失败。请包括firebase数据库中的数据结构以及您用于写入的代码。我已更新了上述集合,以实际匹配firebase的json导出。我只通过模拟器进行测试,因为我还没有访问客户端的权限。根据上述规则,向联系人
和联系人/-LHi-8bIG4xaZADdc9mf
写入成功或失败。太好了,我明天会尝试,如果客户一切顺利,我会接受你的回答。它不允许我在模拟器中写入/contacts
。我猜您不能在那里模拟POST请求。@sboesch您必须确保您正在写入正确的位置。有了这些规则,您无法直接写入/contacts
,您必须更深入地写入一个lvl。实际上,您可以取消读取规则,因为默认值已经为false。太好了,我明天会尝试,如果客户端一切正常,我会接受您的答案。它不允许我在模拟器中写入/contacts
。我猜您不能在那里模拟POST请求。@sboesch您必须确保您正在写入正确的位置。有了这些规则,您无法直接写入/contacts
,您必须更深入地写入一个lvl。实际上,您可以取消读取规则,因为默认值已经为false。