【问题标题】: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 Auth 服务中创建新用户时,在 FireStore 集合中创建新对象的 Firebase 云函数会出错?
【发布时间】:2021-01-12 00:29:31
【问题描述】:

我是 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 云功能日志中收到以下错误:

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

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

【问题讨论】:

  • 那么,您是否按照错误消息的提示致电initializeApp()?没有它就无法使用 Admin SDK。

标签: firebase google-cloud-firestore firebase-authentication google-cloud-functions firebase-admin


【解决方案1】:

错误指出如果要使用Firebase,则需要初始化SDK,您可以找到有关如何执行此操作的详细信息here,如文档中所述:

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

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

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

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

const database = admin.firestore();

【讨论】:

    【解决方案2】:

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

    admin.initializeApp()

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

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 1970-01-01
      • 2018-06-12
      • 2020-12-31
      • 1970-01-01
      • 2021-07-04
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多