Firebase:在 FirebaseAuth 中创建的新用户在 Firestore 中触发事件

Firebase: Trigger event in Firestore on new user created in FirebaseAuth

我写了一个非常简单的 Cloud Function 来在 Firestore 中添加一些字段,其中包含来自 FirebaseAuth 中新创建的 FirebaseUser 的一些信息。

在 Firestore 中,我有一个名为 "highscore" 的集合。每次创建一个新用户时,我想添加一个文档,其中 firebaseusers uid 作为文档,以及 2 个字段,例如:

highscore/uid/score & highscore/uid/usernick(例如 highscore/fgt38gudg9/430 & highscore/fgt38gudg9/cooldude45)

这是我的功能:

const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp();

const db = admin.database()

//On user creation, trigger: Add information to /highscore/uid
exports.onUserCreation = functions.auth.user().onCreate((user) => {

    const collection = db.collection("highscore")
    const userid = user.uid
    const usernick = user.displayName
    collection.doc(userid).set({
        score: 0
        user: usernick
    })

})

但是,当函数被触发时,我运行进入这个错误:

TypeError: db.collection is not a function
    at exports.onUserCreation.functions.auth.user.onCreate (/srv/index.js:11:24)
    at cloudFunctionNewSignature (/srv/node_modules/firebase-functions/lib/cloud-functions.js:120:23)
    at /worker/worker.js:825:24
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

我想不通。有什么建议吗?

我认为您正在使用 Firstore:

const db = admin.firestore()

admin.database() gets you a reference to the Realtime Database instance for your project. What you want to use instead is admin.firestore().

此外,您需要 return 从 set() 获得的承诺,否则,操作可能无法在函数终止之前完成。

return collection.doc(userid).set({
    score: 0
    user: usernick
})

请务必read the documentation about terminating functions了解您在处理由 promises 表示的异步工作时的义务。