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() }
修复说明
- 将
url.pathname.startsWith('/')改为url.pathname === '/',仅在用户访问根路径且已登录时,才重定向到/dashboard,避免覆盖/dashboard自身路径。 - 保留原有的其他路径判断逻辑,确保已登录用户无法访问登录、注册、验证页面,未登录用户无法访问dashboard页面。
配置代码无需修改
你的 config 中的路径匹配器范围是合理的,覆盖了所有需要权限控制的路径,保持原代码即可:
export const config = { matcher: [ '/sign-in', '/sign-up', '/', '/dashboard/:path*', '/verify/:path*' ] }
内容的提问来源于stack exchange,提问作者Sanjana Sogimatt
相关产品推荐
相关产品推荐

