Next.js 13中Next Auth集成Firebase Adapter报错求助
解决Next.js 13中Next Auth + Firebase认证的重复App错误
核心问题原因
错误提示Firebase App named '[DEFAULT]' already exists是因为Firebase默认App被多次初始化,通常是模块重复导入或热重载导致初始化逻辑重复执行。
步骤1:修正Firebase初始化逻辑
修改你的firebase.js文件,加入初始化检查,确保只创建一次默认App:
import { initializeApp, getApp, getApps } from "firebase/app"; import { getFirestore } from "firebase/firestore"; const firebaseConfig = { // 填入你的Firebase配置信息 apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET, messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID, appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID }; // 仅当没有已初始化的App时才创建新实例 const app = !getApps().length ? initializeApp(firebaseConfig) : getApp(); const db = getFirestore(app); export { db };
步骤2:确保Next Auth配置正确导入Firestore实例
在[...nextauth].js中正确导入db,避免在文件内重复初始化Firebase:
import NextAuth from "next-auth"; import { FirestoreAdapter } from "@next-auth/firebase-adapter"; import { db } from "@/lib/firebase"; // 根据你的文件路径调整 // 导入你使用的认证提供商 import GoogleProvider from "next-auth/providers/google"; export const authOptions = { providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), // 其他提供商... ], adapter: FirestoreAdapter(db), // 其他Next Auth配置项 }; export default NextAuth(authOptions);
额外排查点
- 检查项目所有文件,确保没有其他地方直接调用
initializeApp(firebaseConfig)初始化默认App - 清理Next.js缓存:运行
npm run build后再启动开发服务器,避免热重载导致的模块重复加载 - 验证依赖版本兼容性:确保
next-auth、@next-auth/firebase-adapter和firebaseSDK版本匹配(推荐使用最新稳定版)
内容的提问来源于stack exchange,提问作者Mohammed Bekele
相关产品推荐
相关产品推荐

