Joh*_*Doe 10 node.js firebase aws-lambda firebase-admin
我将 firebase 用于 auth 和 db,并将 AWS lambda 用于云函数。
要将 firebase 添加到我的 JS 项目中,我initializeApp将 firebase 配置作为参数,如下所述:https : //firebase.google.com/docs/web/setup。
如此处所述:https : //firebase.google.com/docs/admin/setup,我还需要initializeApp在我的 lambda 函数中。
如下:
const admin = require('firebase-admin');
const serviceAccount = require('../path/to/service-account.json');
const firebaseAdmin = admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "dB_URL"
});
Run Code Online (Sandbox Code Playgroud)
凭据来自 firebase-admin 库,因此我无法将其添加到我的 web firebase 配置中。所以,我需要初始化两次。
但是,如果我这样做,服务器将抛出错误:
默认 Firebase 应用已存在。这意味着您多次调用 initializeApp() 而不提供应用程序名称作为第二个参数。在大多数情况下,您只需要调用 initializeApp() 一次。但如果您确实想初始化多个应用程序,请将第二个参数传递给 initializeApp() 以给每个应用程序一个唯一的名称。
我在这里错过了什么吗?最佳做法是什么?我糊涂了。
之前有人遇到过同样的问题:使用 Firebase SDK 和 Netlify Lambda 函数
对该用户有用的是使用此处记录的 REST API:https : //firebase.google.com/docs/projects/api/workflow_set-up-and-manage-project
文档说它处于测试阶段。
感谢您的帮助
Fra*_*len 32
看来 lambda 可能会加载admin.initializeApp({...})多次调用的脚本文件。为了防止 Admin SDK 多次初始化,您可以例如检测是否已经发生:
if (!admin.apps.length) {
const firebaseAdmin = admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "dB_URL"
});
}
Run Code Online (Sandbox Code Playgroud)
有类似的问题。基于@Frank van Puffelen的回答(感谢他),现在,使用 ES6(Firebase admin V >= 9)
import { initializeApp, applicationDefault, getApps } from "firebase-admin/app";
...
if ( !getApps().length ) {
initializeApp({
credential: applicationDefault(),
databaseURL: 'https://XXXXXXX.firebaseio.com'
});
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8696 次 |
| 最近记录: |