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
相关产品推荐
相关产品推荐

