使用firebase/auth的getAuth时Auth类型不存在verifyIdToken方法
问题根本原因
- 你混淆了客户端Firebase SDK和Firebase Admin SDK的导出方法:
- 客户端
firebase包的getAuth来自firebase/auth,返回的客户端Auth实例仅支持前端鉴权操作,没有verifyIdToken接口 verifyIdToken是Admin SDK专属方法,需要从firebase-admin/auth导入对应的getAuth
- 客户端
解决方案
步骤1:清理依赖
服务端仅保留firebase-admin依赖,卸载客户端firebase包避免导包混淆:
npm uninstall firebase npm install firebase-admin
步骤2:修正代码逻辑
所有相关方法都从firebase-admin包导入,调整后可运行代码如下:
// 全部依赖从firebase-admin导入,不要引入客户端firebase包的内容 import { initializeApp, getApps, getApp, AppOptions, FirebaseApp } from "firebase-admin/app"; import { getAuth, cert } from "firebase-admin/auth"; // 替换为你实际使用的HttpError类导入路径 import { HttpError } from "your-http-error-module"; function createFirebaseAdminApp(config: AppOptions) { if (getApps().length === 0) { return initializeApp(config); } else { return getApp(); } } const options: AppOptions = { credential: cert({ projectId: process.env.FIREBASE_PROJECT_ID, clientEmail: process.env.FIREBASE_CLIENT_EMAIL, privateKey: process.env.FIREBASE_PRIVATE_KEY ? process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, "\n") : "", }), databaseURL: process.env.FIREBASE_DATABASE_URL, }; const firebaseAdmin = createFirebaseAdminApp(options) as FirebaseApp; // 此处getAuth来自Admin SDK,返回的实例自带verifyIdToken方法 const adminAuth = getAuth(firebaseAdmin); adminAuth .verifyIdToken(token) .then((decodedToken) => { res.locals.decodedToken = decodedToken; next(); }) .catch(() => { next(new HttpError("Invalid token provided", 403)); });
补充说明
- 你写的
createFirebaseAdminApp单实例复用逻辑完全符合Admin SDK最佳实践,不会产生多余的App实例 - 服务端全程不引入客户端
firebase包的任何内容,就能彻底避免包混用问题
内容的提问来源于stack exchange,提问作者Lucas Ezequiel Ojeda
相关产品推荐
相关产品推荐

