NextAuth与Firebase集成报错:Cannot use import statement outside a module
解决NextAuth.js + Firebase Discord登录认证错误
核心问题分析
你的代码存在几处关键问题,导致认证流程失败:
- Firebase初始化时调用
getApps.length错误,需调用getApps()获取应用列表后再判断长度 - 混合使用Firebase Compat SDK与模块化SDK,易引发冲突
- NextAuth的Firestore适配器传入配置对象而非已初始化的Firestore实例,可能导致重复初始化错误
修改后的代码
1. 修正firebase.js
import { initializeApp, getApps, getApp } from 'firebase/app'; import { getFirestore } from 'firebase/firestore'; import { getStorage } from 'firebase/storage'; export 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_MEASUREMENT_ID }; // 修复getApps调用方式,避免重复初始化应用 export const app = getApps().length > 0 ? getApp() : initializeApp(firebaseConfig); export const firestore = getFirestore(app); export const storage = getStorage(app);
2. 修正[...nextauth].js
import NextAuth from "next-auth"; import DiscordProvider from 'next-auth/providers/discord'; import { FirestoreAdapter } from "@next-auth/firebase-adapter"; import { firestore } from "../../../lib/firebase"; export default NextAuth({ providers: [ DiscordProvider({ clientId: process.env.DISCORD_ID, clientSecret: process.env.DISCORD_SECRET }), ], // 传入已初始化的Firestore实例,避免重复初始化 adapter: FirestoreAdapter(firestore), // 可选:使用JWT会话策略,减少Firestore依赖 session: { strategy: "jwt" } })
额外检查项
- 确认所有环境变量(
NEXT_PUBLIC_FIREBASE_*、DISCORD_ID、DISCORD_SECRET)在.env.local文件中配置正确,无拼写错误 - 确保Firebase项目已启用Firestore数据库,开发环境可暂时设置数据库规则为:
生产环境需调整为安全规则rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } } - 检查
next-auth和@next-auth/firebase-adapter版本兼容性,建议使用最新稳定版 - 移除
package.json中的"type": "module",Next.js默认支持ES模块,无需额外配置
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

