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

使用Middleware重定向至登录页时出现ERR_TOO_MANY_REDIRECTS循环问题

解决Next.js Middleware重定向循环问题

你的问题核心是Middleware会拦截所有请求,包括登录页本身。当用户没有token时,会被重定向到/auth/login,但访问这个页面又会触发Middleware检查token——此时依然没有token,于是再次重定向,最终陷入无限循环。

修复方案

修改Middleware代码,增加登录页的路径排除判断,仅在非登录页且无token时执行重定向:

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export function middleware(request: NextRequest) {
    const token =!!request.cookies.get('token');
    const currentPath = request.nextUrl.pathname;

    // 仅在非登录页且无token时触发重定向
    if (!token && currentPath!== '/auth/login') {
        // 基于当前请求域名构造登录页URL,避免环境变量路径拼接错误
        return NextResponse.redirect(new URL('/auth/login', request.url));
    }

    // 有token或处于登录页时,允许请求正常执行
    return NextResponse.next();
}

关键修改说明

  • 简化token判断:!!request.cookies.get('token')本身就是布尔值,无需额外三元表达式
  • 路径排除逻辑:跳过登录页的重定向检查,直接打破循环
  • 稳定的URL构造:用request.url作为基准生成登录页地址,避免依赖环境变量可能出现的路径错误
  • 显式返回NextResponse.next():确保有token或在登录页时,请求能正常通过Middleware

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:11