【发布时间】:2016-07-12 09:47:34
【问题描述】:
陷入了这个问题:我想允许用户使用 firebase 在我的网页上注册,因此我计划了以下结构:
users : {
user0 : { //user specific data },
user1 : { //... }
...
}
在我更改安全规则之前,一切正常(写作、阅读……)。我想更改它们,因为我希望用户只注册并且无权删除他们或潜在的其他用户帐户。但我找不到任何对此很有帮助的东西。以下是我目前剩下的:
{
"rules": {
"users" : {
".read": true,
"$uid" : {
".write": "auth !== null && auth.uid === $uid"
}
}
}
}
我想知道如何设置规则以使用户只能添加新帐户。
我将不胜感激!
谢谢:)
编辑:这是我想用上面的规则实现的,也许下面使用模拟器的例子会让我的观点更清楚。
我要做的第一件事是让用户在 /users 节点上注册。因此,我在模拟器中选择了Custom Auth点:
{ 提供者:'匿名',uid:'002a448c-30c0-4b87-a16b-f70dfebe3386' }.
现在,如果我选择“模拟写入”并给出路径 /users 和以下键值对:
{ "002a448c-30c0-4b87-a16b-f70dfebe3386": { "1" : {"a" : "b"}}}
我收到以下消息(请参阅 Result_2),它告诉我,我无法写入 /users,因为没有允许它的写入规则,我在上述安全规则配置中完全理解,但我不知道如何更改它们,以便我能够像上面那样编写键值对,同时仍然允许每个用户在该条目上写入 only。 IE。 uid 为 002a448c-30c0-4b87-a16b-f70dfebe3386 的用户只要经过身份验证,就可以使用上述规则写入相应的值(参见 Result_1)。
例如Custon Auth 经过身份验证的用户在他的条目上写:(按预期完美运行)
{ 提供者:'匿名',uid:'002a448c-30c0-4b87-a16b-f70dfebe3386' }.
和上次一样。现在,在路径上“模拟写入”:
/users/002a448c-30c0-4b87-a16b-f70dfebe3386
结果_1:
尝试使用 auth={"provider":"anonymous","uid" 将 {"4":{"name":"fred"}} 写入 /users/002a448c-30c0-4b87-a16b-f70dfebe3386: "002a448c-30c0-4b87-a16b-f70dfebe3386"}
/
/用户
/users/002a448c-30c0-4b87-a16b-f70dfebe3386:.write: "auth !== null && auth.uid === $uid" => true
允许写入。
结果_2:将用户写入 /users 节点失败,即无法注册。我希望在这里能够将用户添加到 /users 但不能从 /users 修改/删除用户。请参阅下面的模拟器输出。
尝试使用 auth={"provider":"anonymous" 将 {"002a448c-30c0-4b87-a16b-f70dfebe3386":{"1":{"a":"b"}}} 写入 /users, "uid":"002a448c-30c0-4b87-a16b-f70dfebe3386"}
/
/users 没有 .write 规则允许该操作。
写入被拒绝。
【问题讨论】:
标签: firebase firebase-security