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

时间:2019-05-19 01:29:26

标签: javascript firebase google-cloud-firestore firebase-admin

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

在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)

我不知道这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我认为您正在使用Firstore:

ko-KR

答案 1 :(得分:2)

admin.database()为您提供了对项目的实时数据库实例的引用。您要使用的是admin.firestore()

此外,您将希望返回从set()获得的承诺,否则,该操作可能不会在函数终止之前完成。

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

请务必read the documentation about terminating functions来理解您处理诺言所代表的异步工作的义务。