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

如何禁止未登录用户直接访问Node.js项目中的首页?

解决未登录用户直接访问首页的方案

1. 核心知识点:会话(Session)与中间件(Middleware)

你需要掌握Node.js中会话管理和中间件的用法,这是实现登录校验的核心基础——会话用来存储用户登录状态,中间件用来在请求到达目标页面/路由前完成登录状态校验。

2. 具体操作步骤(以Express框架为例)

步骤1:安装并配置会话管理包

常用的会话管理工具是express-session,先执行安装命令:

npm install express-session

在项目入口文件(如app.js)中配置会话:

const express = require('express');
const session = require('express-session');
const app = express();

// 配置session
app.use(session({
  secret: 'your-custom-secret-key', // 自定义加密密钥,生产环境需替换为复杂随机字符串
  resave: false,
  saveUninitialized: false,
  cookie: { 
    secure: false, // 本地开发设为false,生产环境启用HTTPS后改为true
    maxAge: 3600000 // 会话有效期1小时
  }
}));

步骤2:登录成功时标记登录状态

在你已有的登录接口中,当用户账号密码校验通过后,将用户信息存入会话:

// 示例登录接口
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  // 这里是你已实现的数据库校验逻辑
  if (账号密码校验成功) {
    // 将用户信息存入session,标记已登录
    req.session.user = { username };
    res.redirect('/home'); // 登录成功后跳转首页
  } else {
    res.send('用户名或密码错误');
  }
});

步骤3:编写登录校验中间件

创建一个中间件函数,用来检查用户是否处于登录状态:

function requireLogin(req, res, next) {
  // 会话中存在用户信息则放行,否则跳转登录页
  if (req.session.user) {
    next();
  } else {
    res.redirect('/login.html');
  }
}

步骤4:用中间件保护首页路由

不要让首页静态文件直接被公开访问,而是通过路由返回首页,并挂载校验中间件:

// 公开静态资源目录(如登录页、静态资源等)
app.use(express.static('public'));

// 用中间件保护首页路由
app.get('/home', requireLogin, (req, res) => {
  res.sendFile(__dirname + '/public/Home.html');
});

此时用户直接访问http://127.0.0.1:5500/home会先经过登录校验,未登录则自动跳转到登录页;若你仍保留/public/Home.html的直接访问路径,建议将首页文件移出public目录,避免绕过校验。

3. 额外建议

  • 生产环境中,会话密钥secret要通过环境变量存储,不要硬编码,比如使用process.env.SESSION_SECRET。
  • 若使用JWT(JSON Web Token)替代Session,逻辑类似:登录成功返回JWT,前端存储在Cookie或localStorage中,每次请求首页时携带JWT,后端用中间件校验JWT有效性。
  • 补充登出逻辑,销毁会话:
app.get('/logout', (req, res) => {
  req.session.destroy(err => {
    if (err) throw err;
    res.redirect('/login.html');
  });
});

内容的提问来源于stack exchange,提问作者Bilal Belli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:30:51