我遇到了使用电子邮件/密码进行Firebase简单登录的奇怪行为: 如果我使用现有用户帐户登录,我可以写入Firebase ref(即$ root / list / $ item)。 如果没有,我没有按预期的写访问权限(Firebase规则似乎没问题), 但是,如果客户端已登录,并且同时从Firebase Forge(身份验证页面)删除用户,则已连接的客户端仍具有对Firebase ref的写入权限! 它是设计还是错误? 感谢。
以下是规则:
{
"rules": {
".read": true,
"list": {
"$item": {
".write": "auth != null && newData.child('author').val() == auth.id",
".validate": "newData.hasChildren(['author', 'content'])",
"author": {
".validate": "newData.val() == auth.id"
},
"content": {
".validate": "newData.isString()"
}
}
}
}
}
答案 0 :(得分:10)
简短回答:按设计,或更准确,在这种情况下不适用。
在身份验证期间,FirebaseSimpleLogin会生成令牌。将令牌提供给客户端后,它将一直有效,直到它过期。因此,当您在简单登录中删除用户帐户时,这不会以某种方式转到客户端的计算机并删除令牌。这是一个非常标准的auth模型,令牌上的到期长度(可在Forge中配置)是安全性的关键约束。
如果您想立即撤消登录,那么简单登录就不是该作业的正确工具。您需要使用custom login并生成自己的令牌。有一些很棒的discussions on revokable tokens,所以我会把你推迟给那些人,因为那不在你的问题的范围内。