Express-EJS集成JWT认证:删除Cookie触发user未定义错误
解决EJS中
user is not defined的问题 问题根源是后端在无Cookie时未传递user变量,导致EJS模板中直接判断!user时变量未定义,触发引用错误。以下是修复步骤:
1. 后端统一传递user变量
无论请求是否携带有效Cookie,都要给模板传递user变量,无有效用户时设为null或undefined。示例代码:
// Express路由示例 app.get('/', (req, res) => { let user = null; // 检查Cookie中的JWT if (req.cookies.jwt) { try { // 解码JWT获取用户信息 user = jwt.verify(req.cookies.jwt, '你的密钥'); } catch (err) { // 处理无效/过期的JWT,清除Cookie res.clearCookie('jwt'); } } // 统一传递user变量到模板 res.render('你的模板名', { user }); });
2. 修正EJS中的条件判断
现在user变量始终存在,可安全进行条件渲染:
<% if (user) { %> <!-- 渲染用户信息 --> <div>当前用户:<%= user.name %></div> <% } else { %> <!-- 处理离线/未登录场景 --> <div>请登录后访问</div> <% } %>
额外提示
- 解码JWT时务必捕获异常,避免因无效token导致服务器报错
- 清除无效Cookie后,用户后续请求不会再携带无效token,减少不必要的解码操作
内容的提问来源于stack exchange,提问作者Necoo33
相关产品推荐
相关产品推荐

