如何在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
相关产品推荐
相关产品推荐

