NextAuth集成Next.js报错:/api/auth/[...nextauth]未导出默认函数
解决NextAuth报错:"Page /api/auth/[...nextauth] does not export a default function"
这个报错的核心原因是你用了NextAuth v3的旧写法,但当前项目依赖的是NextAuth v4,两者的API路由导出规则不一致。
解决方案步骤:
- 修改导出方式
NextAuth v4不再需要把NextAuth包裹成(req, res)函数导出,直接传入配置对象即可。把你代码里的导出部分替换成:
export default NextAuth(options);
或者更规范的v4写法(推荐):
// [...nextauth].js file import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; // 单独定义authOptions,方便后续在其他组件中引用 export const authOptions = { pages: { signIn: '/login', }, providers: [ CredentialsProvider({ name: 'Credentials', credentials: { username: { label: "Username", type: "text", placeholder: "jsmith" }, password: { label: "Password", type: "password" } }, async authorize(credentials, req) { const res = await fetch("/your/endpoint", { method: 'POST', body: JSON.stringify(credentials), headers: { "Content-Type": "application/json" } }); const user = await res.json(); if (res.ok && user) { return user; } return null; } }) ] }; export default NextAuth(authOptions);
- 检查依赖版本
打开你的package.json,确认next-auth的版本是v4.x.x。如果是v3版本,建议升级到v4(v3已停止维护),升级命令:
npm install next-auth@latest # 或 yarn add next-auth@latest
- 确认文件路径与扩展名
- 确保文件放在
pages/api/auth/[...nextauth].js(Next.js Pages Router)或app/api/auth/[...nextauth]/route.js(Next.js App Router),路径错误会导致Next.js无法识别API路由。 - 如果项目用TypeScript,文件扩展名要改成
.ts。
验证修改
重启Next.js开发服务器,访问认证相关端点(比如/login),报错应该会消失。
内容的提问来源于stack exchange,提问作者Michael Immanuel
相关产品推荐
相关产品推荐

