10

我遇到了使用电子邮件/密码进行 Firebase 简单登录的奇怪行为:如果我使用现有用户帐户登录,我可以写入 Firebase 引用(即 $root/list/$item)。如果没有,我没有预期的写入权限(Firebase 规则似乎没问题),但是如果客户端已登录,并且我同时从 Firebase Forge(身份验证页面)中删除了一个用户,则连接的客户端仍然具有对火力基地参考!这是设计使然还是错误?谢谢。

以下是规则:

{
  "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()"
        }
      }
    }
  }
}
4

1 回答 1

14

简短回答:设计使然,或者更准确地说,在这种情况下不适用。

在身份验证期间,FirebaseSimpleLogin 会生成一个令牌。一旦将令牌提供给客户端,它就会一直有效,直到它过期。因此,当您在简单登录中删除用户帐户时,这不会以某种方式转到客户端计算机并删除令牌。这是一个非常标准的身份验证模型,令牌的到期长度(可在 Forge 中配置)是安全性的关键约束。

如果您想立即撤销登录,那么简单登录不是该工作的正确工具。您需要使用自定义登录并生成自己的令牌。关于 revokable tokens有一些很棒的讨论,所以我会把你推迟到那些讨论中,因为这超出了你的问题的范围。

于 2013-10-15T14:56:12.053 回答