Next.js中间件重定向时如何避免无限循环?
解决方案
问题根源是中间件会拦截所有请求,包括重定向后的/user路径请求,导致重复触发重定向逻辑形成循环。只需在中间件中增加路径判断,跳过目标路由的重定向逻辑即可。
修改后的中间件代码:
export async function middleware(request: NextRequest) { const isUserLoggedIn = ... // 获取当前请求的路径 const currentPath = request.nextUrl.pathname; // 如果用户已登录且当前路径不是目标路由,才执行重定向 if (isUserLoggedIn && currentPath !== '/user') { return NextResponse.redirect(new URL('/user', request.url)); } return NextResponse.next(); }
如果有多个私有路由(比如/user、/dashboard),可以用数组扩展判断逻辑,提升扩展性:
export async function middleware(request: NextRequest) { const isUserLoggedIn = ... const currentPath = request.nextUrl.pathname; const privateRoutes = ['/user', '/dashboard']; if (isUserLoggedIn && !privateRoutes.includes(currentPath)) { return NextResponse.redirect(new URL('/user', request.url)); } return NextResponse.next(); }
这样处理后,当用户被重定向到/user时,中间件检测到当前路径属于目标路由,会直接放行,不会再次触发重定向,彻底解决无限循环问题。
内容的提问来源于stack exchange,提问作者warzonemaster
相关产品推荐
相关产品推荐

