如果已知通配符,Firebase会使用通配符来读取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果已知通配符,Firebase会使用通配符来读取数据相关的知识,希望对你有一定的参考价值。
我有注册系统,我只希望用户注册,如果他们有一个有效的密钥,我将提供给想要注册的用户。如果key在db中,则继续注册。因此,我生成了随机非重复的8个字符,并将它们存储在以下结构的实时数据库中:
Secrets:
"x5f1n9v0":
"Status" : 1
"C8vT2xxY":
"Status" : 1
And so on
..
{
"rules": {
"secrets":{
"$secret": {
".read": true,
".write": false
}
}
}
}
关于上述规则的第一个问题: - 在这种情况下,没有人可以添加新的密钥?只有当某人有我的列表中的有效密钥时,读取才有效吗?没有人可以阅读整个清单?这有什么错误吗?
现在假设另一组规则,如果用户知道有效的id,我想写入每个键的子节点。
如果我将写入的规则更改为true,那么这是否可行并且没有错误来破解它?
"rules": {
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
}
}
谢谢
在这种情况下,没有人可以添加新的密钥?
使用这些第一规则,只有具有管理访问权限的人才能添加密钥。
只有当某人有我的列表中的有效密钥时,读取才有效吗?没有人可以阅读整个清单?
确实没有办法用你的第一套规则读取整个列表。有人只有在知道密钥的情况下才能阅读秘密。
使用第二套规则:
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
现在任何人都可以写任何秘密。这可能不是你想要的。如果您只想允许他们更改现有密钥下已存在的数据,您需要检查是否已存在任何数据:
"secrets":{
"$secret": {
".read": true,
".write": "data.exists()"
}
}
如果您希望他们无法更改但不删除现有数据,那将是data.exists() && newData.exists()
。如果您对用户可以编写的数据格式有其他要求,则需要将这些要求添加到相应的.validate
规则中。
你的最后一套规则既无效又毫无意义。这是无效的,因为没有定义$secrets
。但即使它被定义$secrets === $secrets
将永远是true
。
以上是关于如果已知通配符,Firebase会使用通配符来读取数据的主要内容,如果未能解决你的问题,请参考以下文章