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

如何实现Next.js受保护路由Middleware?当前配置失效求助

排查 Next.js Middleware 不生效的问题

1. 明确指定 Middleware 的匹配路由

默认根目录的 Middleware 会匹配所有路由,但为了精准拦截需要保护的 /redirect 路由,建议显式配置 matcher,避免不必要的路由干扰。修改你的 middleware.ts:

import type { NextRequest } from 'next/server'

export default function middleware(request: NextRequest) {
  const currentUser = request.cookies.get('currentUser')?.value
 
  if (!currentUser) {
    return Response.redirect(new URL('/', request.url))
  }
}

// 指定仅对 /redirect 路由生效
export const config = {
  matcher: '/redirect',
}

使用 js-cookie 设置 Cookie 时,显式指定 path: '/',保证 Cookie 在整个站点范围内能被 Middleware 读取到。修改首页的 login 函数:

const login = (e: { preventDefault: () => void }) => {
  e.preventDefault();

  console.log("login");
  // 显式设置 Cookie 路径为根目录
  Cookies.set("currentUser", "true", { path: '/' });
  router.push("/redirect");
};

3. 重启开发服务器

Next.js 开发环境下,Middleware 的修改可能不会实时热更新,旧代码缓存会导致功能不生效。关闭当前的 npm run dev 进程,重新启动服务器后再测试。

点击按钮跳转后,打开浏览器开发者工具的「网络」标签,查看 /redirect 的请求头,确认 currentUser Cookie 是否被正确携带。如果 Cookie 不存在,说明设置环节有问题;如果 Cookie 存在但仍被重定向,检查 Middleware 中的逻辑是否有误。

内容的提问来源于stack exchange,提问作者Favour Onyido

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:06:08