实时数据库模拟器会忽略database.rules.json

时间:2020-06-19 15:51:24

标签: firebase firebase-realtime-database firebase-security firebase-cli

我有一个使用实时数据库的Firebase项目,并且我正在尝试设置本地模拟器进行测试。不幸的是,似乎Firebase-cli正在使我的database.rules.json文件陷入混乱。即使在创建测试项目来解决此特定问题之后,也会发生这种情况。

让我给您一些有关我的设置的信息。

我创建了一个未启用任何功能的Firebase项目。我在本地计算机上创建了一个空目录,然后运行firebase init database。这样做会创建一些文件:

.firebaserc

{
  "projects": {
    "default": "emulators-test-244be"
  }
}

firebase.json

{
  "database": {
    "rules": "database.rules.json"
  }
}

database.rules.json(我修改了此处的规则以锁定数据库)

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

当我使用firebase emulators:start --only database运行模拟器时,控制台告诉我数据库已成功初始化。但是,当我访问http://localhost:9000/.inspect/coverage?ns=emulators-test-244be来查看当前加载的安全规则时,它将提供以下输出:

{
    "rules": {
        ".read": true,
        ".write": true
    }
}

很明显,这直接与我在database.rules.json文件中设置的规则相矛盾。

我确实注意到的一件事是,如果我在仿真器运行时修改database.rules.json文件,则会从控制台获得以下输出:

i database: Change detected, updating rules for undefined...

显然,这样做会使模拟器创建一个名为undefined的新数据库。当我转到http://localhost:9000/.inspect/coverage?ns=undefined时,输出正确地反映了我在database.rules.json文件中设置的内容。

为什么会这样?我是否错误地设置了本地Firebase项目?还是Firebase CLI中存在错误?我已经搜索了Firebase文档,Stack Overflow和Google。我什么都没找到。

我有Firebase工具版本8.4.3

更新

firebase-tools GitHub存储库中搜索了问题之后,看来这是一个错误。

链接在这里: https://github.com/firebase/firebase-tools/issues/2371

1 个答案:

答案 0 :(得分:0)

此解决方法对我有用:

.firebaserc

{
  "projects": {
    "default": "emulators-test-244be"
  },
  "targets": {
    "emulators-test-244be": {
      "database": {
        "default": [
          "emulators-test-244be"
        ]
      }
    }
  }
}

firebase.json

{
  "database": [
    {
      "target": "default",
      "rules": "database.rules.json"
    }
  ],
  "emulators": {
    "database": {
      "port": 9000
    },
    "ui": {
      "enabled": true,
      "port": 4000
    }
  }
}

当我使用 firebase emulators:start 启动模拟器并访问:http://localhost:9000/.inspect/coverage?ns=emulators-test-244be 时,我获得了 database.rules.json 文件中指定的规则。

希望它也适用于有此问题的其他人。