You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:23:23