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

Next.js中间件Admin配置:解决管理员重定向循环问题

解决管理员访问Admin路径时的重定向循环问题

问题根源

原代码中,只要是/admin/开头的路径,管理员用户都会被强制重定向到/admin/main/users。但这个目标路径同样满足pathname.startsWith("/admin/")的判断条件,导致每次请求都会触发中间件的重定向逻辑,形成无限循环,最终抛出ERR_TOO_MANY_REDIRECTS错误。

修正后的代码

给管理员的重定向逻辑添加终止条件,当用户已经处于允许访问的管理员路径时,直接放行请求:

if (
  adminconfig?.matcher.includes(pathname) ||
  pathname.startsWith("/admin/")
) {
  if (!isAuthenticated) {
    return NextResponse.redirect(new URL("/", request.nextUrl));
  } else if (isAdmin) {
    // 若当前路径已是管理员允许访问的目标路径,直接放行
    if (pathname === "/admin/main/users") {
      return NextResponse.next();
    }
    return NextResponse.redirect(
      new URL("/admin/main/users", request.nextUrl)
    );
  } else {
    return NextResponse.redirect(new URL("/not-admin", request.nextUrl));
  }
}

如果有多个允许管理员访问的路径,可以扩展为数组判断:

// 定义所有允许管理员直接访问的路径
const allowedAdminPaths = ["/admin/main/users", "/admin/main/dashboard", "/admin/settings"];

if (
  adminconfig?.matcher.includes(pathname) ||
  pathname.startsWith("/admin/")
) {
  if (!isAuthenticated) {
    return NextResponse.redirect(new URL("/", request.nextUrl));
  } else if (isAdmin) {
    // 当前路径在允许列表中时,直接放行
    if (allowedAdminPaths.includes(pathname)) {
      return NextResponse.next();
    }
    return NextResponse.redirect(
      new URL("/admin/main/users", request.nextUrl)
    );
  } else {
    return NextResponse.redirect(new URL("/not-admin", request.nextUrl));
  }
}

核心逻辑说明

通过添加路径判断,给管理员的重定向流程设置终止节点:当用户已经处于合法的管理员路径时,不再执行重定向操作,让请求正常通过中间件,彻底打破无限循环的链条。

内容的提问来源于stack exchange,提问作者Gülbeyaz BAYRAM ÖZER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:54:54