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

Node.js登录功能无法正常运行 浏览器提示重定向次数过多疑似陷入循环

重定向次数过多问题排查及修复方案

核心诱因:权限中间件逻辑错误(直接触发循环重定向)

你定义的secured中间件逻辑完全不符合权限校验的预期:
当前逻辑为:

  • 判断用户已登录(存在req.session.id_usuario)→ 重定向到/home
  • 判断用户未登录 → 重定向到/admin/login
    而/home路由本身就绑定了secured作为前置校验,只要你已登录,访问/home就会触发:
    访问/home → 进入secured中间件 → 已登录 → 重定向到/home → 再次进入secured中间件的无限循环,这就是重定向次数过多的直接原因。

正确的权限中间件逻辑应该是:已登录就放行调用next()执行后续路由渲染逻辑,未登录才跳转登录页。

其他需修复的错误点

  • cookie-parser引入和调用错误:
    依赖包名是cookie-parser,你写的require('cookieParser')拼写错误会找不到依赖;且应该用app.use(cookieParser())加载中间件,你误用了路由方法app.get()加载中间件,完全不生效。
  • morgan重复引入:同时用ES模块import和CommonJSrequire引入两次morgan,冗余且可能引发日志异常。
  • 中间件加载顺序错误:session、cookie解析、请求体解析这类基础中间件需要放在所有路由定义之前加载,你当前的加载顺序会导致部分路由拿不到session、cookie值。

修复后代码

import express from "express";
import config from "./config";
import morgan from "morgan";
import cors from "cors";
import path from "path";
import session from 'express-session';
import cookieParser from 'cookie-parser';

import loginRouter from './routes/admin/login';
import contact from "./routes/contact";


const app = express();

app.set("PORT", config.PORT);
// 基础中间件统一放在最前面
app.use(cors());
app.use(morgan('dev'));
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(session({
    secret:'dasajk453sdhas234dkl534jasdjk',
    resave:false,
    saveUninitialized:true
}));

// 模板配置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

// 修复后的权限中间件
var secured = async(req,res,next) => {
    try{
        if(req.session.id_usuario){
            // 已登录直接放行
            next();
        }else{
            // 未登录跳登录页
            res.redirect('/admin/login');
        }
    }catch(error){
        console.log(error)
        next(error);
    }
}

// 路由定义
app.get("/", (_, res) => res.render("admin/login.hbs"));
app.use("/contact", contact);
app.use('/admin/login', loginRouter);
app.get("/home", secured, (req, res)=>res.render("index.hbs"));

export default app;

内容的提问来源于stack exchange,提问作者Victoria Sztern

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:03