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 表示的异步工作时的义务。
我写了一个非常简单的 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 表示的异步工作时的义务。