登录后无法隐藏Login/Register标签、显示Logout标签的问题
问题修复方案
核心问题
你在模板中使用的变量是currentUser,但Express中间件里将用户信息赋值给了req.user,变量名称不匹配导致模板无法正确判断用户登录状态。
具体修复步骤
- 修正模板中的变量名
将模板里的currentUser替换为user(对应Express传递的req.user):
<div class="navbar-nav ms-auto"> <% if (!user) { %> <a class="nav-link" href="/login">Login</a> <a class="nav-link" href="/register">Register</a> <% } else { %> <a class="nav-link" href="/logout">Logout</a> <% } %> </div>
- 确保Express将用户变量传递给模板
在渲染页面的路由中,把req.user作为模板变量传入:
// 示例路由(根据你的实际页面调整) app.get('/', (req, res) => { res.render('your-page-template', { user: req.user }); });
- 验证中间件的正确性
确认用户认证中间件在路由之前执行,且正确将用户信息赋值给req.user。示例中间件:
app.use((req, res, next) => { // 根据你的认证方式(session/JWT等)获取用户 req.user = req.session.currentUser; // 或从JWT解析结果赋值 next(); });
额外检查
- 登录后确认会话(或认证令牌)已正确设置,保证
req.user在登录状态下有值。 - 确认模板引擎(如EJS)配置正常,能正确解析
<% %>语法。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

