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

使用NextAuth Firebase适配器报错Cannot access 'app' before initialization

错误原因
  • 初始化顺序错误:你的Firebase客户端配置文件中,调用getAnalytics(app)时app还未执行初始化赋值,app的初始化代码在调用语句之后,触发了变量未初始化的引用错误。
  • SDK版本混用:代码同时使用了Firebase v8的命名空间导入语法(import firebase from "firebase/app")和v9的模块化API语法(import { initializeApp } from "firebase/app"),两种语法不兼容,也会引发后续调用异常。
解决方法

1. 修正Firebase客户端配置代码

统一Firebase SDK写法,调整初始化顺序,避免变量未初始化调用,修正后代码示例如下:

import firebase from "firebase/app";
import "firebase/auth";
import "firebase/firestore";
import "firebase/analytics";

const firebaseConfig = {
  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,
  measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASURMENT_ID,
};

// 避免重复初始化
if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig);
}

const app = firebase.app();
const analytics = firebase.analytics(app);
const firestore = firebase.firestore();

export { firestore };
export default firebase;

2. 简化NextAuth配置代码

直接复用Firebase客户端导出的firestore实例,避免重复初始化逻辑:

import NextAuth from "next-auth";
import { FirebaseAdapter } from "@next-auth/firebase-adapter";
import GoogleProvider from "next-auth/providers/google";
import { firestore } from "../../../firebase/FirebaseClient";

export default NextAuth({
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
  adapter: FirebaseAdapter(firestore),
});

额外注意

如果你的项目使用Firebase v9模块化版本,需同步升级@next-auth/firebase-adapter到支持v9的对应版本,避免API不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:08