Firebase Auth创建用户时触发Cloud Function写入Firestore报错求助
解决Firebase Cloud Function中
db.collection is not a function的错误 这个问题其实很典型——你混淆了Firebase的实时数据库和Firestore的API引用方式!
错误根源
你代码里的这一行:
const db = admin.database()
获取的是Firebase实时数据库的实例,而实时数据库的API里根本没有collection()方法——这个方法是属于Firestore的。所以当你调用db.collection("highscore")时,自然会抛出TypeError: db.collection is not a function的错误。
另外还有一个小语法错误:你在set()的对象里,score: 0后面没有加逗号,这会导致代码运行时出错,这个也需要一并修正。
修正后的完整代码
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); // 替换成Firestore的引用 const db = admin.firestore(); // 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; // 注意补上score字段后的逗号 return collection.doc(userid).set({ score: 0, user: usernick }); });
额外注意事项
- 确保你的Firebase项目已经启用了Firestore服务(可以在Firebase控制台的"Firestore数据库"页面确认)。
- 别忘了在
set()方法前加上return,这样Cloud Function才能正确等待异步操作完成,避免函数提前终止。
内容的提问来源于stack exchange,提问作者CJR
相关产品推荐
相关产品推荐

