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

Node.js评论时如何获取登录用户名?是否需用Session Storage?

不需要使用Session Storage,基于现有JWT即可实现需求

你当前的登录逻辑已经采用了JWT(JSON Web Token)进行身份认证,完全不需要依赖Session Storage来实现评论时获取当前用户信息的功能。以下是具体实现步骤:

1. 完善登录接口,返回JWT给前端

当前登录代码中已生成JWT,但未返回给前端。修改登录接口,验证成功后将token和必要用户信息返回:

const admin = await loginData.findOne({ where: { email } });
if (admin && (await bcrypt.compare(password, admin.password))) {
  const token = jwt.sign(
    { admin_id: admin._id, email, username: admin.username }, // 直接将用户名签入JWT
    process.env.TOKEN_KEY,
    {
      expiresIn: "365d",
    }
  );

  admin.token = token;
  // 返回token和用户信息给前端
  return res.status(200).json({ token, username: admin.username });
}
// 登录失败逻辑
return res.status(401).send("邮箱或密码错误");

2. 编写JWT验证中间件

创建中间件解析请求头中的JWT,验证有效性后将用户信息挂载到req对象:

const jwt = require('jsonwebtoken');

const authenticateToken = (req, res, next) => {
  // 从Authorization头提取token(格式为Bearer <token>)
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) {
    return res.status(401).send("请先登录");
  }

  jwt.verify(token, process.env.TOKEN_KEY, (err, user) => {
    if (err) {
      return res.status(403).send("无效的登录凭证");
    }
    // 将解析后的用户信息挂载到req.user
    req.user = user;
    next();
  });
};

3. 为评论接口添加认证中间件

在评论API的路由中加入中间件,确保只有已登录用户才能提交评论:

// 示例路由配置,添加authenticateToken中间件
app.post('/comments/:id', authenticateToken, async (req, res) => {
  // 原评论接口逻辑
});

4. 修改评论接口,关联当前登录用户

通过req.user获取当前用户信息,将其关联到评论记录:

try {
  const { comment } = req.body;
  const stageComment = await initCommentModel();
  const id = req.params.id;
  // 从req.user提取当前用户信息
  const { admin_id, username } = req.user;

  // 创建评论时存入用户ID和用户名
  await stageComment.create({
    comment: comment,
    stage_id: id,
    admin_id: admin_id,
    username: username // 若评论表未设username字段,可只存admin_id,后续通过关联查询获取用户名
  });

  return res.send("SUCCESS");
} catch (err) {
  return res.send(err.stack);
}

补充说明

Session Storage是浏览器端本地存储方案,用于前端临时保存会话数据,但你的后端已采用JWT无状态认证,无需维护Session存储。前端只需将登录获取的JWT存入localStorage或Session Storage,后续请求评论接口时,在请求头Authorization字段中带上Bearer <token>即可。

内容的提问来源于stack exchange,提问作者sumanth.js

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:20:24