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



我有一个使用实时数据库的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。我什么也没找到。

我有火力基础工具版本8.4.3.

更新

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

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

这个解决方法对我有用:

.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文件中指定的规则。

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

最新更新