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

分类发布权限验证失效求助:未登录用户仍可发布分类

问题分析与修复方案

你的权限控制失效核心原因是验证逻辑完全偏离了“判断用户是否已登录”的需求,当前代码是在验证账号密码的正确性,而非用户的登录状态,导致无论是否登录,只要能提供正确的邮箱密码就能创建分类,甚至已登录用户没传密码会被拒绝。

问题点拆解

  1. 登录态管理缺失:没有使用session、JWT这类标准方式跟踪用户登录状态,而是每次创建分类都要求传入邮箱和密码,这既不安全,也完全不符合“已登录用户才能操作”的逻辑。
  2. 验证逻辑错误:调用User.login(email2, req.body.password)是在验证“这个邮箱和密码是否匹配用户数据”,而不是验证“当前请求的用户已经完成登录流程”。

修复步骤

1. 先实现正确的登录态管理(以express-session为例)

首先安装并配置session中间件,用来跟踪用户登录状态:

const session = require('express-session');
// 在你的express app配置中添加
app.use(session({
  secret: 'your-custom-secret-key', // 替换为自己的安全密钥
  resave: false,
  saveUninitialized: false,
  cookie: { 
    secure: false, // 生产环境请设为true,配合HTTPS使用
    maxAge: 24 * 60 * 60 * 1000 // 设置session有效期为1天
  }
}));

然后编写登录接口,验证账号密码后将用户信息存入session:

// 用户登录接口
app.post('/login', (req, res) => {
  const { email, password } = req.body;
  const matchedUser = User.data.find(user => user.email === email && user.password === password);
  
  if (matchedUser) {
    req.session.user = matchedUser; // 标记用户已登录
    return res.status(200).send('登录成功');
  } else {
    return res.status(401).send('账号或密码错误');
  }
});

2. 修改分类创建接口的权限验证逻辑

移除原来错误的密码验证,改为检查session中是否存在用户信息:

routeCategory.post("/category", (req, res) => {
  // 优先验证用户是否已登录
  if (!req.session.user) {
    return res.status(401).send("You must be logged in to create a category");
  }

  // 原有参数验证逻辑保留
  if (!req.body || !req.body.category_id) {
    return res.status(400).send("category missing");
  }

  const id = req.body.category_id;
  const existingCategory = category.categoryData.find(
    element => element.category_id === id
  );

  if (existingCategory) {
    return res.status(409).send("Category already exists");
  }

  // 创建分类逻辑保留
  const newCategory = {
    category_id: req.body.category_id,
    categoryName: req.body.categoryName,
  };
  category.createCategory(newCategory);
  return res.sendStatus(201);
});

额外提醒

  • 生产环境中不要明文存储密码,应该用bcrypt等工具对密码进行哈希加密后再存入数据库。
  • 如果是前后端分离项目,推荐使用JWT令牌代替session,更适合跨域场景。

内容的提问来源于stack exchange,提问作者Amr Aboelmagd Hussien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:22:52