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

Next.js 14+NextAuth:Postman请求API时getServerSession返回null求助

问题解决:Next.js 14 App Router + NextAuth 中 Postman 请求 API 无法获取 Session

核心原因

NextAuth 默认通过 next-auth.session-token Cookie 识别会话,浏览器访问时会自动携带该 Cookie,因此 page.tsx 中 getServerSession 能正常工作;但你在 Postman 中是将该 token 放在 Authorization: Bearer <token> 头中,不符合 NextAuth 默认的校验逻辑,导致 API 路由内无法读取到 Session。

解决方案

方案1:Postman 直接携带 Session Cookie(最简单)

在 Postman 请求中添加对应 Cookie,而非使用 Bearer Token:

  • 打开 Postman 的请求面板,切换到 Cookies 标签
  • 添加一个 Cookie:
    • 名称:next-auth.session-token
    • 值:你之前使用的那个 session token
  • 发送请求,此时 API 路由内的 getServerSession 就能正常读取到 Session 对象。

方案2:修改 AuthOptions 支持 Bearer Token 认证(需切换 JWT 策略)

如果必须使用 Bearer Token 方式,需将 NextAuth 的会话策略改为 JWT,并手动在 API 路由中解析验证:

  1. 调整 authOptions 配置(通常在 app/api/auth/[...nextauth]/route.ts 中):
export const authOptions = {
  session: {
    strategy: "jwt", // 切换为 JWT 策略
  },
  jwt: {
    secret: process.env.NEXTAUTH_SECRET, // 确保已配置该环境变量
  },
  // 其他原有配置(providers、pages等)
};
  1. 在目标 API 路由中手动解析 Bearer Token:
import { verifyJwt } from "next-auth/jwt";
import { authOptions } from "@/app/api/auth/[...nextauth]/route"; // 确保导入正确的 authOptions

export async function GET(req: NextRequest, ds: DynamicSegment) {
  // 从 Authorization 头提取 Token
  const authHeader = req.headers.get("authorization");
  const token = authHeader?.replace("Bearer ", "");

  if (!token) {
    return new Response("Unauthorized", { status: 401 });
  }

  // 验证 Token 并获取会话数据
  const session = await verifyJwt({
    token,
    secret: authOptions.jwt?.secret!,
  });

  if (!session) {
    return new Response("Unauthorized", { status: 401 });
  }

  console.log(session); // 此时可正常获取 Session
  // 自定义业务逻辑...
}

方案3:检查 AuthOptions 导入一致性

确认 API 路由中导入的 options(即 authOptions)与 page.tsx 中使用的是同一个配置文件,避免因路径错误导致配置不一致,无法解析会话。

内容的提问来源于stack exchange,提问作者Martin Pacheco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:24:54