You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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和firebase SDK版本匹配(推荐使用最新稳定版)

内容的提问来源于stack exchange,提问作者Mohammed Bekele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:35:29