Next Auth集成MongoDB Adapter导致首页404问题求助
问题描述
我在Next 13项目中集成Next Auth,按照教程添加MongoDB Adapter后,首页出现404错误,控制台无任何报错提示。注释Adapter代码行并重建项目后一切正常;项目运行后再恢复该行代码,也能正常工作。
路由文件路径:app/api/auth/[...nextauth]/route.ts
代码内容:
import NextAuth from 'next-auth'; import clientPromise from '@/lib/mongodb'; import { MongoDBAdapter } from '@auth/mongodb-adapter'; import type { Adapter } from 'next-auth/adapters'; import GoogleProvider from 'next-auth/providers/google'; const handler = NextAuth({ providers: [ GoogleProvider({ clientId: String(process.env.GOOGLE_CLIENT_ID), clientSecret: String(process.env.GOOGLE_CLIENT_SECRET), }), ], adapter: MongoDBAdapter(clientPromise) as Adapter, // 引发问题的代码行 jwt: { secret: process.env.NEXTAUTH_SECRET, }, }); export { handler as GET, handler as POST };
排查与解决方案
检查MongoDB连接配置
确认@/lib/mongodb中的clientPromise配置正确,尤其是连接字符串是否包含有效数据库名、环境变量是否在构建阶段正常加载。构建时若连接信息错误,Adapter初始化失败可能导致路由处理异常,但运行时热重载可能重新加载了正确的配置。移除冗余类型断言
你添加的as Adapter强制类型转换可能掩盖了类型不匹配问题。MongoDBAdapter返回的类型本身就符合Adapter接口,尝试去掉这个断言,查看构建时是否出现类型错误——这很可能是构建失败的隐性原因。验证版本兼容性
确保next-auth与@auth/mongodb-adapter版本匹配,Next 13 App Router对Next Auth版本有特定要求,建议使用最新稳定版,避免版本冲突导致构建阶段的隐性错误。查看构建日志细节
执行npm run build时仔细查看终端输出,可能存在被忽略的警告或错误(比如MongoDB连接失败、依赖缺失等),这些信息不会出现在浏览器控制台,但会导致路由构建异常。调整Adapter初始化方式
由于MongoDB连接是异步操作,构建时同步初始化可能引发问题,尝试改为异步初始化:const handler = NextAuth({ providers: [ GoogleProvider({ clientId: String(process.env.GOOGLE_CLIENT_ID), clientSecret: String(process.env.GOOGLE_CLIENT_SECRET), }), ], adapter: async () => { const client = await clientPromise; return MongoDBAdapter(client); }, jwt: { secret: process.env.NEXTAUTH_SECRET, }, });
内容的提问来源于stack exchange,提问作者mark

