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

如何在Express/Node.js+MongoDB环境下用JWT显示当前登录用户名

解决在homepage.hbs显示当前登录用户名的问题

嘿,这事儿其实挺简单的,咱们只需要两步就能搞定:把用户名从后端传递到模板,然后在页面里渲染出来。

第一步:修改后端路由,传递用户名到模板

你的Index.js里已经通过JWT解析出了包含user_name的profile对象,但目前只是渲染了页面,没把这个数据传给模板。咱们调整一下/homepage的路由代码,把用户名作为参数传给模板引擎:

router.get('/homepage', function(req, res, next) {
  try {
    var jwtString = req.cookies.Authorization.split(" ");
    var profile = verifyJwt(jwtString[1]);
    if (profile) {
      // 将用户名传递给hbs模板
      res.render('homepage', { username: profile.user_name });
    } else {
      // 解析失败时重定向到登录页(更符合页面路由的交互逻辑)
      res.redirect('/login');
    }
  } catch (err) {
    // 捕获JWT验证错误,同样重定向到登录页
    res.redirect('/login');
  }
});

这里要确保你的verifyJwt函数能正确解析JWT并返回包含user_name的对象,比如它的实现应该是这样的(如果还没完善的话):

function verifyJwt(token) {
  try {
    return jwt.verify(token, 'JWT password'); // 密钥要和createJwt里的保持一致
  } catch (err) {
    return null;
  }
}

第二步:在homepage.hbs中渲染用户名

现在后端已经把username传给模板了,你只需要在homepage.hbs里用Handlebars的语法把它显示在合适位置就行,比如导航栏或者欢迎语里:

<div class="welcome-section">
  <h3>欢迎回来,{{username}}!</h3>
</div>

如果想传递整个用户信息对象,后端可以改成传递完整的profile:

res.render('homepage', { userProfile: profile });

然后模板里这样用:

欢迎回来,{{userProfile.user_name}}!

额外小提醒

  • 登录接口返回的{'success' : 'currentlyloggedIn'}其实不影响功能,因为你已经通过Cookie存储了JWT,前端跳转逻辑没问题;
  • 错误处理时,页面路由优先选择重定向到登录页,比返回JSON错误更符合用户体验。

这样修改后,用户登录跳转到首页就能看到自己的用户名啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:56:38