Firebase Cloud Functions中functions.auth.user()为何未定义?
functions.auth.user()中auth未定义问题 使用Firebase Cloud Functions部署时遇到functions.auth.user()中auth未定义的错误,导致部署失败。已尝试卸载重装npm、Node.js、Firebase CLI,切换函数版本(偏好v1),重新初始化项目,问题仍未解决,需要成功部署函数。
相关代码与环境信息
index.js
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); // 现有helloWorld函数 exports.helloWorld = functions.https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase! ::: FUNCTIONS - " + JSON.stringify(functions)); }); // 记录新创建用户UID的新函数 exports.logNewUser = functions.auth.user().onCreate((user) => { functions.logger.info(`New user created with UID: ${user.uid}`, {structuredData: true}); });
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": "18" }, "main": "index.js", "dependencies": { "firebase-admin": "^12.5.0", "firebase-functions": "^6.0.1" }, "devDependencies": { "firebase-functions-test": "^3.1.0" }, "private": true }
系统设置
node --version v20.17.0 npm --version 10.8.2 firebase --version 13.18.0
错误信息
TypeError: Cannot read properties of undefined (reading 'user')
Error: Functions codebase could not be analyzed successfully. It may have a syntax or runtime error
Functions信息
FUNCTIONS - {"alerts":{"appDistribution":{"newTesterIosDeviceAlert":"appDistribution.newTesterIosDevice","inAppFeedbackAlert":"appDistribution.inAppFeedback"},"billing":{"planUpdateAlert":"billing.planUpdate","planAutomatedUpdateAlert":"billing.planAutomatedUpdate"},"crashlytics":{"newFatalIssueAlert":"crashlytics.newFatalIssue","newNonfatalIssueAlert":"crashlytics.newNonfatalIssue","regressionAlert":"crashlytics.regression","stabilityDigestAlert":"crashlytics.stabilityDigest","velocityAlert":"crashlytics.velocity","newAnrIssueAlert":"crashlytics.newAnrIssue"},"performance":{"thresholdAlert":"performance.threshold"},"eventType":"google.firebase.firebasealerts.alerts.v1.published"},"database":{"writtenEventType":"google.firebase.database.ref.v1.written","createdEventType":"google.firebase.database.ref.v1.created","updatedEventType":"google.firebase.database.ref.v1.updated","deletedEventType":"google.firebase.database.ref.v1.deleted"},"storage":{"archivedEvent":"google.cloud.storage.object.v1.archived","finalizedEvent":"google.cloud.storage.object.v1.finalized","deletedEvent":"google.cloud.storage.object.v1.deleted","metadataUpdatedEvent":"google.cloud.storage.object.v1.metadataUpdated"},"https":{},"identity":{},"pubsub":{},"logger":{},"tasks":{},"eventarc":{},"scheduler":{},"remoteConfig":{"eventType":"google.firebase.remoteconfig.remoteConfig.v1.updated"},"testLab":{"eventType":"google.firebase.testlab.testMatrix.v1.completed"},"firestore":{"writtenEventType":"google.cloud.firestore.document.v1.written","createdEventType":"google.cloud.firestore.document.v1.created","updatedEventType":"google.cloud.firestore.document.v1.updated","deletedEventType":"google.cloud.firestore.document.v1.deleted","writtenEventWithAuthContextType":"google.cloud.firestore.document.v1.written.withAuthContext","createdEventWithAuthContextType":"google.cloud.firestore.document.v1.created.withAuthContext","updatedEventWithAuthContextType":"google.cloud.firestore.document.v1.updated.withAuthContext","deletedEventWithAuthContextType":"google.cloud.firestore.document.v1.deleted.withAuthContext"},"params":{"BUCKET_PICKER":{"resource":{"type":"storage.googleapis.com/Bucket"}},"declaredParams":[],"databaseURL":"params.DATABASE_URL","projectID":"params.PROJECT_ID","gcloudProject":"params.GCLOUD_PROJECT","storageBucket":"params.STORAGE_BUCKET"},"app":{}}
解决方案
确认Firebase项目已启用Auth服务
登录Firebase控制台,检查当前项目是否开启了Firebase Authentication服务,未启用则先开启后再部署。适配Firebase Functions v6版本的导入方式
v6版本中部分触发器需显式解构导入,修改代码如下:const functions = require('firebase-functions'); const { auth } = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.helloWorld = functions.https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase! ::: FUNCTIONS - " + JSON.stringify(functions)); }); exports.logNewUser = auth.user().onCreate((user) => { functions.logger.info(`New user created with UID: ${user.uid}`, {structuredData: true}); });统一Node.js版本与package.json配置
当前package.json指定node版本为18,但本地使用20,可选择:- 将package.json中
engines.node改为"20", - 或降级Node.js到18.x版本,避免版本不兼容问题。
- 将package.json中
重新安装依赖
删除本地依赖文件后重新安装:rm -rf node_modules package-lock.json npm install降级到兼容的Functions版本
若偏好v1版本,需安装对应版本并匹配Node.js版本(v1仅支持Node.js 8-10):npm uninstall firebase-functions npm install firebase-functions@1.1.0
内容的提问来源于stack exchange,提问作者Dual Tech

