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

Express.js配置protect身份校验中间件后出现重定向次数过多错误

问题根因

你的路由配置存在路径冲突,触发了无限重定向死循环:

  • 你优先注册了前缀为/auth的auth接口路由,所有/auth开头的请求都会优先进入该路由组匹配
  • 未登录时protect中间件会跳转到GET /auth登录页,该请求进入auth接口路由组后,没有匹配的GET类型路由,就会触发组内全局挂载的protect中间件,未登录状态下再次跳转/auth,形成循环。

修复方案

方案1:区分接口与视图路由前缀(推荐)

从根源避免路径冲突,将auth接口路由的前缀调整为/api/auth,和视图路径完全隔离:

// app.js 修改路由注册逻辑
app.use("/api/auth", authRoutes);
app.use("/", viewRoutes);

修改后接口请求路径变为/api/auth/signup、/api/auth/signin,和视图的/auth登录页路径完全不冲突,不会再出现路由匹配错位的问题。

方案2:调整路由注册顺序

如果不想修改接口前缀,可以把viewRoutes注册放到authRoutes前面:

// app.js 调整注册顺序
app.use("/", viewRoutes);
app.use("/auth", authRoutes);

因为viewRoutes里只定义了GET /auth这一个/auth开头的路由,其他/auth开头的POST请求不会被viewRoutes匹配,会继续走到后面的authRoutes里命中对应的接口路由,不会出现接口无法访问的问题。

额外修复:protect函数语法错误

你当前的protect函数里有一处多余字符,会引发运行时报错,需要删除:

// 原错误代码
if (!user) {
  return res.redirect("/auth");s
}
// 修正后
if (!user) {
  return res.redirect("/auth");
}

内容的提问来源于stack exchange,提问作者Farid Ghaderi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:27:01