为什么这个在 Firebase Auth 服务中创建新用户时在 FireStore 集合中创建新对象的 Firebase Cloud Function 出错了?

Why this Firebase Cloud Function that create a new object into FireStore collection when a new user is created into Firebase Auth service goes wrong?

我是 Firebase 的新手,遇到以下问题。

我需要在 Firestore 集合中创建一个名为 Users 的新对象,当新用户在 Firebase 身份验证 服务使用 云函数

我定义并部署了这个云函数:

exports.newUserSignUp = functions.auth.user().onCreate(user => {
  console.log("NEW USER CREATED: ", user);

  var userObject = {
    displayName : user.displayName,
    email : user.email,
 };

 console.log("userObject: ", userObject);

 let result = admin.firestore().doc('Users/').set(userObject);

 return result;

});

Firebase Auth 中创建新用户时执行该功能,但我在我的 firebase 云功能日志中收到以下错误:

Error: The default Firebase app does not exist. Make sure you call initializeApp() before using any of the Firebase services. at FirebaseAppError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28) at FirebaseAppError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:88:28) at new FirebaseAppError (/srv/node_modules/firebase-admin/lib/utils/error.js:123:28) at FirebaseNamespaceInternals.app (/srv/node_modules/firebase-admin/lib/firebase-namespace.js:101:19) at FirebaseNamespace.app (/srv/node_modules/firebase-admin/lib/firebase-namespace.js:452:30) at FirebaseNamespace.ensureApp (/srv/node_modules/firebase-admin/lib/firebase-namespace.js:468:24) at FirebaseNamespace.fn (/srv/node_modules/firebase-admin/lib/firebase-namespace.js:327:30) at exports.newUserSignUp.functions.auth.user.onCreate.user (/srv/lib/index.js:20:24) at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:133:23) at /worker/worker.js:825:24

怎么了?我错过了什么?我该如何解决?

假设您在云函数服务器上使用 Admin SDK。你只需要这个:

admin.initializeApp()

确保将其粘贴在函数之外,然后您将拥有对管理 SDK 功能的完全访问权限,这正是您尝试使用的功能。

错误提示如果你想使用Firebase需要初始化SDK,你可以找到关于如何初始化的详细信息here,正如文档中提到的:

“创建 Firebase 项目后,您可以使用将服务帐户文件与 Google 应用程序默认凭据相结合的授权策略来初始化 SDK。

Firebase 项目支持 Google 服务帐户,您可以使用这些帐户从您的应用服务器或受信任的环境调用 Firebase 服务器 API。如果您在本地开发代码或部署您的应用程序 on-premises,您可以使用通过此服务帐户获得的凭据来授权服务器请求。"

您应该在 Admin 对象的任何其他方法之前调用 initializeApp(),例如:

admin.initializeApp({
  credential: admin.credential.cert(servicesAccount),
  databaseURL: "...",
});

const database = admin.firestore();