Firebase注册功能报错:Uncaught (in promise) ReferenceError: exports is not defined
问题根源与解决方法
你遇到的ReferenceError: exports is not defined是因为把Firebase云函数的后端代码写在了前端浏览器环境中,具体问题点:
exports是Node.js模块系统的语法,前端浏览器(Vite打包的前端代码)不支持这个语法,仅Node.js环境(如后端服务器、云函数)会用到。functions.auth.user().onCreate是Firebase云函数的用户创建触发器,这部分代码必须部署到Firebase云函数环境运行,不能在前端页面里执行。admin.firestore()是Firebase Admin SDK,仅用于后端服务,前端应该用你已经导入的客户端Firestore SDK(db实例)。
修正方案1:前端直接创建用户文档(无需云函数)
如果你的需求只是在用户注册成功后写入基础用户信息到Firestore,直接用前端客户端SDK操作即可,不需要云函数。修改createUserWithEmailAndPassword的回调部分:
createUserWithEmailAndPassword(auth, email, password).then(async (cred) => { const overlay = document.getElementById('overlay'); overlay.classList.add('hidden'); // 注意:需提前获取overlayP元素,否则会引发新错误 const overlayP = document.getElementById('overlayP'); overlayP.classList.remove('hidden'); signUpForm.reset(); // 用前端Firestore实例创建用户文档 await setDoc(doc(db, "users", cred.user.uid), { email: cred.user.email, uid: cred.user.uid, }); // document.getElementById("signUpErr").innerHTML = ""; }) .catch(err => { document.getElementById("signUpErr").innerHTML = err.message; });
修正方案2:使用Firebase云函数(适合需要后端逻辑的场景)
如果需要在用户创建时执行后端专属操作(比如设置默认用户角色、写入敏感数据),需要单独创建并部署云函数:
- 本地初始化Firebase云函数项目(需提前安装
firebase-tools):firebase init functions - 在
functions/index.js中编写云函数代码:const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.createUserDoc = functions.auth.user().onCreate(async (user) => { await admin.firestore().collection("users").doc(user.uid).set({ email: user.email, uid: user.uid, // 可添加后端专属字段,比如默认角色 role: "user" }); }); - 部署云函数:
部署完成后,用户注册成功时Firebase会自动触发该云函数,无需在前端写任何相关代码。firebase deploy --only functions
内容的提问来源于stack exchange,提问作者HarryNC
相关产品推荐
相关产品推荐

