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

NextJS 14生产环境中间件触发“重定向次数过多”错误

NextJS 14 生产环境认证中间件失效问题排查与修复

问题1:URL比较逻辑不严谨

直接拼接字符串对比完整URL容易出错——生产环境中request.url可能包含查询参数、哈希值,或存在 trailing slash(末尾斜杠)差异,导致匹配判断失效。应该用request.nextUrl提供的属性做精准路径判断:

替换原逻辑为:

export async function middleware(request: NextRequest) {
  const token = cookies().get("access_token");
  const pathname = request.nextUrl.pathname;
  const origin = request.nextUrl.origin;

  // 无token且当前路径非根目录时,重定向到登录页
  if (!token && pathname !== "/") {
    return NextResponse.redirect(new URL("/", origin));
  }
  // 有token且当前在根目录时,重定向到仪表盘
  if (token && pathname === "/") {
    return NextResponse.redirect(new URL("/dashboard", origin));
  }

  return NextResponse.next();
}

问题2:Matcher配置覆盖不全

当前的matcher未包含根路径/,导致访问根目录时中间件不执行,有token的用户无法自动跳转到仪表盘;同时/:path仅匹配单级路径,会遗漏多级路径(如/dashboard/settings)。建议调整为更精准的规则,排除静态资源和API路径:

export const config = {
  matcher: [
    /*
     * 匹配所有请求路径,除了以下前缀的路径:
     * - api(API路由)
     * - _next/static(静态文件)
     * - _next/image(图片优化文件)
     * - favicon.ico(站点图标)
     */
    "/((?!api|_next/static|_next/image|favicon.ico).*)",
  ],
};

问题3:生产环境Cookie属性缺失

生产环境使用HTTPS时,access_token Cookie必须设置Secure: true,否则浏览器会阻止Cookie传递到服务器,导致中间件无法获取token。同时要确保SameSite和path属性配置正确:

// 示例:登录接口中设置Cookie的代码
cookies().set("access_token", tokenValue, {
  httpOnly: true,
  secure: process.env.NODE_ENV === "production",
  sameSite: "strict",
  maxAge: 60 * 60 * 24, // 1天有效期
  path: "/", // 确保全站路径可访问该Cookie
});

额外排查项

  • 确认生产环境NODE_ENV环境变量已正确设置为production
  • 查看生产环境日志,检查token是否为undefined(若为undefined,说明Cookie未正确传递)
  • 若设置了Cookie的domain属性,需确保与生产环境域名完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:12:49