yhi*_*ick 1 firebase google-cloud-platform firebase-cli
我总是很感激你的帮助。
我想admin.initializeApp();在本地和生产中编写代码。
当我在没有扩展的情况下将函数部署到生产中时,它可以工作。但是在本地,它需要我像下面这样写:
const serviceAccount = require("/home/yhirochick/development/ServiceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://xxxx.firebaseio.com/"
});
Run Code Online (Sandbox Code Playgroud)
在官方文档中,它说当您不带参数初始化 Firebase Admin SDK 时会自动应用配置
但是当我在firebase serve --only functions本地执行命令并且一些调用邮递员的一些请求时会产生以下错误:
[2019-07-22T06:45:26.227Z] @firebase/database: FIREBASE WARNING: Provided
authentication credentials for the app named "[DEFAULT]" are invalid. This
usually indicates your app was not initialized correctly. Make sure the
"credential" property provided to initializeApp() is authorized to access the
specified "databaseURL" and is from the correct project.
Run Code Online (Sandbox Code Playgroud)
我想知道如何“admin.initializeApp();” 本地没有参数。
我也解决了这个问题,我认为官方文档中目前没有很好地解释本地测试场景。但这里有一个解决方案:
对于您的本地环境,您需要下载 firebase 项目firebase 服务帐户json 文件(在项目设置 -> 服务帐户下的 firebase 控制台中找到)并设置一个环境变量GOOGLE_APPLICATION_CREDENTIALS以指向该文件:
# Linux/MACOS version
export GOOGLE_APPLICATION_CREDENTIALS="[PATH_TO_YOUR_SERVICE_ACCOUNT_FILE]"
Run Code Online (Sandbox Code Playgroud)
在此处阅读更多信息,以及如何在 Windows 上执行此操作
现在您将能够在admin.initializeApp()本地使用(不带参数)。
这种方法的一个可能的缺点是,在启动 firebase 模拟器之前,每次启动终端时都必须设置环境变量,因为在结束会话时该变量会被删除。
您可以export ...通过将命令与启动模拟器的命令捆绑在一起来自动执行该命令。您可以通过scripts在您的部分添加一个条目来做到这一点package.json,例如:
"local": "export GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_YOUR_SERVICE_ACCOUNT_FILE]' && firebase emulators:start --only functions"
Run Code Online (Sandbox Code Playgroud)
然后,在此示例中,您只需键入npm run local.
看看这个例子:https : //stackoverflow.com/a/47517466/1269280。
它基本上使用运行时节点环境变量来区分本地和生产,然后使用仅在本地环境中提供凭据的显式方式。
这是我首选的做事方式,因为我认为它更便携。它允许我将服务帐户文件放在我的代码库中,而不是处理其绝对文件路径。
如果您执行此类操作,请记住从您的存储库中排除服务帐户文件!(它包含敏感信息)。
admin.initializeApp()(没有参数)在生产中开箱即用的原因是,当您部署到生产中时,即 Firebase 函数,代码最终位于“Google 托管环境”中。在 Cloud Functions、Cloud Run、App Engine 等 Google 托管环境中,管理 SDK 可以访问您的应用程序默认服务帐户(您在上面下载的那个),并在未指定凭据时使用该帐户。
这是 Google Clouds应用默认凭据(ADC) 策略的一部分,该策略也适用于 Firebase 功能。
现在,您的本地环境不是“谷歌托管环境”,因此它无权访问默认服务帐户凭据。对于谷歌云,你的本地机器只是一个试图访问你的私有 Firebase 资源的外部服务器。因此,您需要以上述方式之一提供您的服务帐户凭据。
在我知道这一点之前,我认为因为我已经通过我的终端 ie 登录到了 firebasefirebase login并且能够将代码部署到 firebase,firebase 模拟器也将拥有 firebase admin sdk 的必要凭据,但事实并非如此.
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |