NextJS 13调用getServerSession报TypeError: res.getHeader is not a function
解决NextJS 13 App Router中调用getServerSession报错的问题
错误原因
你遇到的TypeError: res.getHeader is not a function是因为混用了Pages Router和App Router的API写法:
- 原代码使用的
NextApiRequest/NextApiResponse是Pages Router专属的API类型,不适用于App Router的Route Handler(即app/api/xxx/route.ts中的处理函数) - Next Auth v4在App Router环境下,
getServerSession的调用逻辑已调整,不再需要传入req和res参数
解决步骤
1. 确保Next Auth版本支持App Router
Next Auth从v4.23.0开始正式适配App Router,先检查package.json中的next-auth版本,若低于该版本,执行升级:
npm install next-auth@latest
2. 迁移Next Auth路由到App Router
将原Pages Router下的pages/api/auth/[...nextauth].ts迁移到App Router路径app/api/auth/[...nextauth]/route.ts,示例代码如下:
import NextAuth from "next-auth"; import { authOptions } from "@/lib/auth"; // 你的auth配置文件路径 const handler = NextAuth(authOptions); export { handler as GET, handler as POST };
3. 正确调用getServerSession
在App Router的Route Handler中,直接传入你的authOptions即可获取session,无需传递req/res参数:
import { getServerSession } from "next-auth/next"; import { authOptions } from "@/lib/auth"; import { NextRequest, NextResponse } from "next/server"; export async function GET(req: NextRequest) { // 仅传入authOptions即可 const session = await getServerSession(authOptions); const sessionErrors = checkSessionErrors(session, req.url); if (sessionErrors) return sessionErrors; // 其余业务逻辑 return NextResponse.json({ message: "请求成功", data: {} }); }
4. 关键配置检查
- 确保
.env文件中已设置NEXTAUTH_SECRET(可通过openssl rand -hex 32命令生成随机密钥) - 你的
authOptions配置需符合NextAuthOptions类型要求,必须包含providers、secret等核心字段
内容的提问来源于stack exchange,提问作者Maramal
相关产品推荐
相关产品推荐

