Google Cloud Function初始化App后仍报默认Firebase App未创建错误
问题解决:Firebase Cloud Function 自定义令牌创建错误
错误原因
你混淆了Firebase客户端SDK与Admin SDK的使用场景:
- 你初始化的是Firebase Admin SDK,但调用
getAuth()时用的是客户端SDK的firebase/auth模块 - 客户端SDK的
getAuth()需要单独初始化客户端App实例,而你并未做这一步,导致找不到默认App
创建自定义令牌是Admin SDK的专属功能,必须使用Admin SDK的Auth模块来实现。
修正步骤
- 替换客户端SDK的Auth模块为Admin SDK的Auth模块
- 确保Admin App初始化逻辑正确(Cloud Functions环境下无需传入参数,会自动读取项目配置)
- 使用Admin SDK的
getAuth()方法创建自定义令牌
修正后的代码
const functions = require("firebase-functions"); const { initializeApp } = require("firebase-admin/app"); const { getAuth } = require("firebase-admin/auth"); // 改用Admin SDK的Auth模块 // Cloud Functions环境下,initializeApp无需参数,自动加载项目配置 initializeApp(); exports.login = functions .region("europe-west2") .https.onRequest(async (request, response) => { const uid = request.query.uid; // 先校验uid是否存在 if (!uid) { return response.status(400).send("缺少uid参数"); } try { const customToken = await getAuth().createCustomToken(uid); response.status(200).send(customToken); } catch (error) { response.status(406).send(error.message); console.error("创建自定义令牌失败:", error); } });
额外说明
- 改用
async/await替代then/catch让代码逻辑更清晰,同时避免潜在的响应重复发送问题 - 增加了uid参数校验,提前拦截非法请求
- Cloud Functions部署时,确保已通过
firebase init functions完成项目关联,Admin SDK会自动获取项目权限
内容的提问来源于stack exchange,提问作者chris herd
相关产品推荐
相关产品推荐

