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

AMF*_*ech 7 firebase firebase-security firebase-realtime-database firebase-cli

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

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

我创建了一个没有启用任何内容的 Firebase 项目。我在本地计算机上创建了一个空目录并运行firebase init database. 这样做创建了一些文件:

.firebaserc

{
  "projects": {
    "default": "emulators-test-244be"
  }
}
Run Code Online (Sandbox Code Playgroud)

firebase.json

{
  "database": {
    "rules": "database.rules.json"
  }
}
Run Code Online (Sandbox Code Playgroud)

database.rules.json(我这里修改了规则来锁定数据库)

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "rules": {
        ".read": true,
        ".write": true
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,这直接违背了我在文件中设定的规则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

更新

在 GitHub 存储库上搜索问题后firebase-tools,这似乎是一个错误。

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

Mor*_*aug 4

这个解决方法对我有用:

.firebaserc

{
  "projects": {
    "default": "emulators-test-244be"
  },
  "targets": {
    "emulators-test-244be": {
      "database": {
        "default": [
          "emulators-test-244be"
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

firebase.json

{
  "database": [
    {
      "target": "default",
      "rules": "database.rules.json"
    }
  ],
  "emulators": {
    "database": {
      "port": 9000
    },
    "ui": {
      "enabled": true,
      "port": 4000
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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