在Node-Express应用中用户认证后如何显示/隐藏登录、登出相关链接
问题根源
你在全局中间件中已经固定给res.locals.user赋值为req.user或者null,所以EJS模板渲染时,user变量永远是已定义状态,typeof user !== 'undefined'这个判断永远为真,根本走不到else分支。同时你原来的判断逻辑完全写反了:现有逻辑是user存在时显示注册、登录链接,和你要实现的需求完全相反。
修复方案
不需要修改中间件代码,直接调整EJS模板的判断逻辑即可:
<% if (!user) { %> <!-- 未登录状态展示注册、登录 --> <li class="nav-item"> <a class="nav-link active" href="/user/register">Sign Up</a> </li> <li class="nav-item"> <a class="nav-link active" href="/user/login">Sign in</a> </li> <% } else { %> <!-- 已登录状态展示登出 --> <li class="nav-item"> <a class="nav-link active" href="/logout">Sign Out</a> </li> <% } %>
逻辑说明
未登录场景下user值为null,!user判断结果为真,展示注册、登录链接;登录后user为有效值,!user判断结果为假,展示登出链接,完全匹配需求。
内容的提问来源于stack exchange,提问作者Bhaskar
相关产品推荐
相关产品推荐

