Next.js 14 + NextAuth v5 Beta部署Azure WebApp时构建报错:auth不是合法的Route导出字段
Next.js 14 + NextAuth v5 Beta部署Azure WebApp时构建报错:auth不是合法的Route导出字段
遇到这个问题别慌,我来帮你梳理清楚原因和解决办法:
问题根源
Next.js App Router 下的 route.tsx 文件是专门用来定义API端点的HTTP请求处理器的,它对导出内容有严格限制——只能导出GET、POST、PUT、DELETE这类对应HTTP方法的函数。你现在把 auth、signIn、signOut 这些NextAuth的辅助工具函数也一起导出了,这就违反了Next.js的路由类型校验规则,所以构建时会抛出这个错误。
解决方案:拆分导出文件
我们只需要把NextAuth的配置和辅助函数移到一个独立文件中,让路由文件只负责导出HTTP处理函数即可:
- 创建独立的Auth配置文件
新建一个比如app/lib/auth.ts(路径可以根据你的项目结构调整),把所有NextAuth的配置和导出都放在这里:
import NextAuth from "next-auth"; import AzureADProvider from "next-auth/providers/azure-ad"; export const { handlers: { GET, POST }, auth, signIn, signOut, } = NextAuth({ providers: [ AzureADProvider({ clientId: process.env.AZURE_AD_CLIENT_ID, clientSecret: process.env.AZURE_AD_CLIENT_SECRET, tenantId: process.env.AZURE_AD_TENANT_ID, }) ] })
- 修改原路由文件
回到app/api/auth/[...nextauth]/route.tsx,只从刚才的配置文件导入并导出HTTP方法处理器:
import { GET, POST } from "@/app/lib/auth"; export { GET, POST };
为什么这么做?
这样拆分后,路由文件完全符合Next.js的API路由规范,而 auth、signIn、signOut 这些工具函数则可以在你需要的地方(比如服务器组件、客户端组件、中间件里)直接从 @/app/lib/auth 导入使用,既不影响功能,又能顺利通过Azure WebApp的构建校验。
备注:内容来源于stack exchange,提问作者charan vendra
相关产品推荐
相关产品推荐

