部署Firebase Auth触发函数时遇TypeError: 无法读取undefined的'user'属性
排查Firebase Cloud Function用户创建事件触发错误
我正在开发一个Firebase Cloud Function,需求是监听Firebase Authentication的用户创建事件,在实时数据库中以用户ID为键创建新记录,记录包含email字段和值为false的permission字段。但部署时触发错误,具体代码、错误信息及package.json如下:
原代码
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); const addUserToDatabase = (userRecord) => { const uid = userRecord.uid; const email = userRecord.email; return admin.database().ref(`/Users/${uid}`).set({ email: email, permission: false }); } // This function runs when a new user is created via Firebase Authentication module.exports = { addUserToDatabase: functions.auth.user().onCreate(addUserToDatabase), }
错误信息
TypeError: Cannot read properties of undefined (reading 'user') at Object.<anonymous> (/Users/yanir/coding/fBCLI/functions/index.js:19:39) at Module._compile (node:internal/modules/cjs/loader:1554:14) at Object..js (node:internal/modules/cjs/loader:1706:10) at Module.load (node:internal/modules/cjs/loader:1289:32) at Function._load (node:internal/modules/cjs/loader:1108:12) at TracingChannel.traceSync (node:diagnostics_channel:322:14) at wrapModuleLoad (node:internal/modules/cjs/loader:220:24) at Module.require (node:internal/modules/cjs/loader:1311:12) at require (node:internal/modules/helpers:136:16) at loadModule (/Users/yanir/coding/fBCLI/functions/node_modules/firebase-functions/lib/runtime/loader.js:40:16)
package.json
{ "name": "functions", "description": "Cloud Functions for Firebase", "scripts": { "serve": "firebase emulators:start --only functions", "shell": "firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log" }, "engines": { "node": "22" }, "main": "index.js", "dependencies": { "firebase-admin": "^12.6.0", "firebase-functions": "^6.3.2" }, "devDependencies": { "firebase-functions-test": "^3.1.0" }, "private": true }
解决方案
错误原因是你使用的Firebase Functions v6.x版本已修改Auth事件的API结构,原有的functions.auth.user().onCreate()写法已被废弃,需调整为新的调用方式。
修改后的完整代码:
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); const addUserToDatabase = (event) => { // v6版本中,用户信息通过event.data获取 const userRecord = event.data; const uid = userRecord.uid; const email = userRecord.email; return admin.database().ref(`/Users/${uid}`).set({ email: email, permission: false }); } module.exports = { addUserToDatabase: functions.auth.onUserCreated(addUserToDatabase), }
关键修改点:
- 将
functions.auth.user().onCreate()替换为functions.auth.onUserCreated() - 回调函数参数从直接的
userRecord改为event,用户信息需通过event.data获取(v6版本事件结构变化)
修改完成后,重新执行部署命令:
firebase deploy --only functions
内容的提问来源于stack exchange,提问作者Yanir Aton
相关产品推荐
相关产品推荐

