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

使用Next 14与Next-Auth 5:Middleware是否足以保护API路由及应用?

Next 14 + Next-Auth 5:Dashboard内API与Server Action的安全校验问题

核心结论

必须额外检查会话,Middleware的页面路由保护不足以覆盖API路由和Server Action的安全需求。

为什么Middleware不够?

Middleware只负责拦截页面路由的访问请求,确保未登录用户打不开/dashboard页面。但API路由(比如/api/dashboard/xxx)和Server Action是独立的业务端点——攻击者完全可以绕过页面,直接用Postman、浏览器控制台等工具调用这些接口,Middleware根本拦不住这种直接请求。

正确的校验方式

1. API路由里加校验

在API路由的处理函数里直接调用Next-Auth的auth()方法验证会话:

// app/api/dashboard/route.ts
import { auth } from "@/auth";

export async function GET() {
  const session = await auth();
  if (!session?.user) {
    return new Response("未授权", { status: 401 });
  }
  // 这里放心执行数据库读写
  return Response.json({ data: "你的敏感数据" });
}

2. Server Action里加校验

Server Action同样要在内部做会话校验,因为它本质是服务器端的函数调用,不会自动继承页面的权限:

// app/dashboard/actions.ts
"use server";
import { auth } from "@/auth";

export async function updateUserSettings(formData: FormData) {
  const session = await auth();
  if (!session?.user) {
    throw new Error("你没有权限执行这个操作");
  }
  // 处理表单数据并更新数据库
}

额外校验的好处

  • 防直接调用:杜绝攻击者绕过页面直接操作后端接口的可能
  • 细粒度权限:比如你要限制只有管理员能修改某些数据,这种逻辑Middleware做不了,必须在业务层校验
  • 处理会话过期:用户打开页面后会话过期,页面可能还没跳转,但此时调用接口会被及时拦截,避免无效操作

内容的提问来源于stack exchange,提问作者thomas dasilva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:40:01