Firestore 模拟器:无法使用主机 0.0.0.0 查看 UI 中的文档
Firestore emulator: can't see documents in UI using host 0.0.0.0
我在 Windows 上使用 firebase-tools v9.0.1,将 NVM 用于 Windows v1.1.7 和 Node v14.15.2。
我已经成功安装并可以 运行 用于 firestore、功能和身份验证的模拟器。我使用模拟器 UI 向 firestore 填充了数据,并使用 firebase emulators:export test_data
导出了一些测试数据。我现在在使用 firebase emulators:start --import test_data
启动模拟器时使用它,以便在模拟器 UI.
重新启动后看到我的所有测试数据
当我将 firebase.json 中的主机更改为 0.0.0.0 以便我可以将真实设备上的 flutter 应用 运行ning 连接到模拟器时,奇怪的事情就开始了:
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions"
},
"emulators": {
"auth": {
"port": 9099
},
"functions": {
"port": 5001,
"host": "0.0.0.0" <-- this is added
},
"firestore": {
"port": 8080,
"host": "0.0.0.0" <-- this is added
},
"ui": {
"enabled": true
}
}
}
当我这样做并重新启动模拟器时,它们成功启动,我可以访问 UI - 但所有文件都不见了。我可以看到所有 collections,只是看不到任何文件。但是,设备可以看到文档 - 所以它们就在那里,只是 UI 没有显示它们。该设备甚至可以添加文档(也不会出现在 UI 中)。如果我再次导出数据,然后在没有主机 0.0.0.0
的情况下重新启动模拟器,嘿,很快所有文档都会再次出现,其中使用设备添加的文档。
似乎正在发生的事情是,当我 运行 使用主机 0.0.0.0 时,UI 没有权限查看任何文档。这是预期的还是这是一个错误?有没有办法解决?模拟器似乎没有任何安全规则,所以我有点卡住了。
编辑
启动开发者控制台后,我可以在模拟器 UI 页面上看到:
VM6:1 POST
http://0.0.0.0:8080/google.firestore.v1.Firestore/Listen/channel?database=projects%2Fmyproject%2Fdatabases%2F(default)&VER=8&RID=9716&CVER=22&X-HTTP-Session-Id=SomeRedactedStuff
net::ERR_ADDRESS_INVALID
所以我猜问题是 UI 正在 0.0.0.0 而不是 localhost 上寻找 firebase。我不确定如何解决这个问题。
事实证明 this was a bug,现在已在 firebase-tools v9.1.0 中修复。如果您全局安装了 CLI,请使用以下命令检查您的版本:
npm outdated -g --depth=0
如果您有较早的版本,例如:
Package Current Wanted Latest Location
firebase-tools 9.0.1 9.1.0 9.1.0 global
更新使用:
npm install -g firebase-tools
我在 Windows 上使用 firebase-tools v9.0.1,将 NVM 用于 Windows v1.1.7 和 Node v14.15.2。
我已经成功安装并可以 运行 用于 firestore、功能和身份验证的模拟器。我使用模拟器 UI 向 firestore 填充了数据,并使用 firebase emulators:export test_data
导出了一些测试数据。我现在在使用 firebase emulators:start --import test_data
启动模拟器时使用它,以便在模拟器 UI.
当我将 firebase.json 中的主机更改为 0.0.0.0 以便我可以将真实设备上的 flutter 应用 运行ning 连接到模拟器时,奇怪的事情就开始了:
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions"
},
"emulators": {
"auth": {
"port": 9099
},
"functions": {
"port": 5001,
"host": "0.0.0.0" <-- this is added
},
"firestore": {
"port": 8080,
"host": "0.0.0.0" <-- this is added
},
"ui": {
"enabled": true
}
}
}
当我这样做并重新启动模拟器时,它们成功启动,我可以访问 UI - 但所有文件都不见了。我可以看到所有 collections,只是看不到任何文件。但是,设备可以看到文档 - 所以它们就在那里,只是 UI 没有显示它们。该设备甚至可以添加文档(也不会出现在 UI 中)。如果我再次导出数据,然后在没有主机 0.0.0.0
的情况下重新启动模拟器,嘿,很快所有文档都会再次出现,其中使用设备添加的文档。
似乎正在发生的事情是,当我 运行 使用主机 0.0.0.0 时,UI 没有权限查看任何文档。这是预期的还是这是一个错误?有没有办法解决?模拟器似乎没有任何安全规则,所以我有点卡住了。
编辑
启动开发者控制台后,我可以在模拟器 UI 页面上看到:
VM6:1 POST http://0.0.0.0:8080/google.firestore.v1.Firestore/Listen/channel?database=projects%2Fmyproject%2Fdatabases%2F(default)&VER=8&RID=9716&CVER=22&X-HTTP-Session-Id=SomeRedactedStuff net::ERR_ADDRESS_INVALID
所以我猜问题是 UI 正在 0.0.0.0 而不是 localhost 上寻找 firebase。我不确定如何解决这个问题。
事实证明 this was a bug,现在已在 firebase-tools v9.1.0 中修复。如果您全局安装了 CLI,请使用以下命令检查您的版本:
npm outdated -g --depth=0
如果您有较早的版本,例如:
Package Current Wanted Latest Location
firebase-tools 9.0.1 9.1.0 9.1.0 global
更新使用:
npm install -g firebase-tools