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

Next-auth中间件引发localhost重定向过多问题求助

问题排查与修复方案

核心问题分析

你的中间件出现无限重定向的根本原因是路径判断逻辑错误:url.pathname.startsWith('/') 会匹配所有路径(任何URL路径都以 / 开头),包括 /dashboard。当用户被重定向到 /dashboard 后,中间件再次执行,此时token存在,又满足该条件,会再次重定向到 /dashboard,形成无限循环,最终触发 ERR_TOO_MANY_REDIRECTS 错误。

修复后的中间件代码

export async function middleware(request: NextRequest) {
    const token = await getToken({ req: request, raw: true })
    console.log('middleware executing')
    const url = request.nextUrl

    // 有token时,仅在访问登录/注册/验证/根路径时跳转到dashboard
    if (token && 
        (
            url.pathname.startsWith('/sign-in') ||
            url.pathname.startsWith('/sign-up') ||
            url.pathname.startsWith('/verify') ||
            url.pathname === '/' // 修改为严格匹配根路径,而非所有路径
        )
    ) {
        console.log('redirecting to dashboard')
        return NextResponse.redirect(new URL('/dashboard', request.url))
    }

    // 无token时访问dashboard跳转到登录页
    if (!token && url.pathname.startsWith('/dashboard')) {
        return NextResponse.redirect(new URL('/sign-in', request.url))
    }

    return NextResponse.next()
}

修复说明

  1. 将 url.pathname.startsWith('/') 改为 url.pathname === '/',仅在用户访问根路径且已登录时,才重定向到 /dashboard,避免覆盖 /dashboard 自身路径。
  2. 保留原有的其他路径判断逻辑,确保已登录用户无法访问登录、注册、验证页面,未登录用户无法访问dashboard页面。

配置代码无需修改

你的 config 中的路径匹配器范围是合理的,覆盖了所有需要权限控制的路径,保持原代码即可:

export const config = {
  matcher: [
    '/sign-in',
    '/sign-up',
    '/',
    '/dashboard/:path*',
    '/verify/:path*'
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:32:05