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

问题描述

我在Firebase中还很陌生,存在以下问题。

当使用 Firebase身份验证服务在新帐户上注册新用户时,我需要在名为 Users Firestore 集合中创建一个新对象。 功能

我定义并部署了此云功能

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身份验证中创建新用户时执行该功能,但是我在Firebase云功能日志中遇到以下错误

错误认的Firebase应用程序不存在。在使用任何Firebase服务之前,请确保您调用initializeApp()。在FirebaseAppError.PrefixedFirebaseError [作为构造函数](/ srv / node_modules / firebase-admin / lib /下,在FirebaseAppError.FirebaseError [作为构造函数](/srv/node_modules/firebase-admin/lib/utils/error.js:42:28) FirebaseNamespaceInternals.app(/ srv / node_modules / firebase-admin / lib)上的新FirebaseAppError(/srv/node_modules/firebase-admin/lib/utils/error.js:123:28)处的utils / error.js:88:28) FirebaseNamespace.app(/srv/node_modules/firebase-admin/lib/firebase-namespace.js:452:30)处的FirebaseNamespace.ensureApp(/ srv / node_modules / firebase-admin)中的/firebase-namespace.js:101:19) /lib/firebase-namespace.js:468:24)在FirebaseNamespace.fn(/srv/node_modules/firebase-admin/lib/firebase-namespace.js:327:30)在export.newUserSignUp.functions.auth.user中。在on / worker / worker.js:825上的cloudFunction(/srv/node_modules/firebase-functions/lib/cloud-functions.js:133:23)上的onCreate.user(/srv/lib/index.js:20:24) :24

怎么了?我想念什么?我该如何解决

解决方法

假设您正在云功能服务器上使用Admin SDK。您需要的只是这个:

admin.initializeApp()

确保将此功能限制在函数之外,然后您将拥有对admin SDK功能的完全访问权限。

,

该错误表明如果要使用Firebase,则需要初始化SDK,如文档所述,您可以找到有关here的详细信息:

“创建了Firebase项目后,您可以使用将您的服务帐户文件与Google Application Default Credentials结合在一起的授权策略来初始化SDK。

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

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

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

const database = admin.firestore();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...