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 路由中解析验证:
- 调整
authOptions配置(通常在app/api/auth/[...nextauth]/route.ts中):
export const authOptions = { session: { strategy: "jwt", // 切换为 JWT 策略 }, jwt: { secret: process.env.NEXTAUTH_SECRET, // 确保已配置该环境变量 }, // 其他原有配置(providers、pages等) };
- 在目标 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
相关产品推荐
相关产品推荐

