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

如何在Next.js App Router中使用getServerSession()保护API路由

在Next.js App Router中用NextAuth保护API路由

App Router的API路由结构和Pages Router不同,需要放在app/api/[路由名称]/route.js文件中,通过Route Handler(导出HTTP方法函数)实现,同时获取会话的方式也有简化。

完整实现代码

// app/api/get-session-example/route.js
import { getServerSession } from "next-auth";
import { authOptions } from "../auth/[...nextauth]";
import { NextResponse } from "next/server";

export async function GET() {
  // 无需传入req/res,直接传入authOptions即可获取会话
  const session = await getServerSession(authOptions);

  if (session) {
    // 已登录状态:执行你的业务逻辑
    console.log("Session", JSON.stringify(session, null, 2));
    return NextResponse.json({ session });
  } else {
    // 未登录状态:返回401未授权响应
    return NextResponse.json({ error: "未授权访问" }, { status: 401 });
  }
}

关键差异说明

  • App Router使用Route Handler,通过导出GET/POST等对应HTTP方法的函数来处理请求,替代Pages Router中的默认导出函数
  • getServerSession不再需要手动传入req和res参数,Route Handler运行在服务器端,NextAuth会自动处理上下文
  • 响应通过NextResponse对象构建,替代Pages Router中的res对象

支持多HTTP方法

如果需要处理POST等其他请求,直接导出对应的方法函数即可:

export async function POST() {
  const session = await getServerSession(authOptions);
  
  if (!session) {
    return NextResponse.json({ error: "未授权访问" }, { status: 401 });
  }
  
  // 这里写POST请求的处理逻辑
  return NextResponse.json({ message: "请求处理成功" });
}

内容的提问来源于stack exchange,提问作者Md Shafiul Azam Hany

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:02:12