【问题标题】:Realtime database emulator ignores database.rules.json实时数据库模拟器忽略 database.rules.json
【发布时间】:2020-10-09 22:14:51
【问题描述】:

我有一个使用实时数据库的 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 repo 上搜索了issues,看来这是个bug。

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

【问题讨论】:

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


    【解决方案1】:

    这个解决方法对我有用:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 2023-03-25
      相关资源
      最近更新 更多