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

登录后在页面显示MongoDB用户用户名的实现问题

解决方案

要实现登录后在首页显示用户名,需要完成传递用户名到模板和持久化登录状态两个核心操作,以下是具体修改步骤:

1. 安装并配置会话管理依赖

首先安装express-session来保存用户登录状态(避免刷新页面后丢失登录信息):

npm install express-session

修改index.js,引入并配置会话,同时完善路由逻辑:

const express = require('express')
const app = express()
const path = require('path')
const hbs = require('hbs')
const collection = require('./mongodb')
const session = require('express-session') // 新增会话依赖

const templatePath = path.join(__dirname, '../templates')

// 新增会话配置
app.use(session({
  secret: 'your-custom-secret-key', // 替换为自定义加密密钥,比如随机字符串
  resave: false,
  saveUninitialized: false,
  cookie: { secure: false } // 开发环境用false,生产环境启用HTTPS后改为true
}))

app.use(express.static('public'))
app.use('/css', express.static(__dirname + 'public/stylesheets'))
app.use(express.json())
app.set('view engine', 'hbs')
app.set('views', templatePath)
app.use(express.urlencoded({extended:false}))

// 新增home页面GET路由,验证登录状态
app.get('/home', (req, res) => {
  if (req.session.username) {
    // 已登录,渲染首页并传递用户名
    res.render('home', { username: req.session.username })
  } else {
    // 未登录,跳转至登录页
    res.redirect('/')
  }
})

app.get('/', (req, res) => {
  res.render('login')
})

app.get('/signup', (req, res) => {
  res.render('signup')
})

app.post('/signup', async(req, res) => {
  const data = {
    username: req.body.username,
    password: req.body.password
  }
  await collection.insertMany([data])
  res.render('login')
})

// 修改登录路由,保存用户名到会话并传递给模板
app.post('/login', async(req, res) => {
  try {
    const check = await collection.findOne({username: req.body.username})
    if(check.password === req.body.password) {
      // 将用户名存入会话,保持登录状态
      req.session.username = req.body.username
      // 渲染首页时传递用户名
      res.render('home', { username: req.body.username })
    } else {
      res.send('Wrong password')
    }
  } catch {
    res.send('Wrong sign-in credentials')
  }
})

app.listen(3000, () => {
  console.log('port is running, betta go catch it!')
})

2. 修改首页模板显示用户名

在首页的HTML片段中,使用HBS模板语法插入用户名变量:

<div class="top-nav-left">
  <span class="logged-in-as">Logged in as: {{username}}</span>
</div>

补充提示

  • 会话配置中的secret务必替换为自己的随机字符串,保障会话安全性
  • 当前代码中密码为明文存储,建议后续使用bcrypt等工具加密存储密码,避免数据泄露风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:45:34