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

基于Express+EJS+Passport的站点登录后导航栏元素动态切换实现咨询

第一步:配置Express后端全局模板变量

你之前用<% if (isLoggedIn) %>不生效大概率是没有把登录状态变量同步给EJS模板,添加以下中间件可以让所有EJS页面直接拿到登录状态,不需要每个路由单独传参:

// 这段代码要放在session配置、passport初始化代码之后,路由定义之前
app.use((req, res, next) => {
  // 挂载全局登录状态变量
  res.locals.isLoggedIn = req.isAuthenticated();
  // 可选:挂载当前登录用户信息,方便后续显示用户名、头像等
  res.locals.currentUser = req.user;
  next();
});

// 先配置好登出路由,示例如下
app.post('/logout', (req, res, next) => {
  req.logout((err) => {
    if (err) return next(err);
    res.redirect('/');
  });
});

第二步:替换导航栏EJS代码

直接用以下代码替换你原有的导航栏代码即可:

<header> <!-- home page -->
  <div class="container">
    <img src="/images/logo.png" alt="logo" class="logo">
    <nav>
      <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/articoli">Articoli</a></li>
        <li><a href="/serie">Serie</a></li>
        <% if (isLoggedIn) { %>
          <!-- 已登录状态:显示个人中心入口+登出按钮 -->
          <li><a href="/profilo"><img src="/images/user-icon.png" alt="个人中心" style="width:20px;height:20px;vertical-align:middle;"></a></li>
          <li>
            <form action="/logout" method="POST" style="display:inline;">
              <button type="submit" style="background:none;border:none;color:inherit;cursor:pointer;padding:0;font:inherit;">登出</button>
            </form>
          </li>
        <% } else { %>
          <!-- 未登录状态:显示登录注册入口 -->
          <li><a href="/accedi">Accedi</a></li>
          <li><a href="/iscriviti">Iscriviti</a></li>
        <% } %>
      </ul>
    </nav>
  </div>
</header>

你可以自行调整个人中心的图标路径、按钮样式,匹配现有设计风格即可。确认Passport的session配置正常,登录接口调用req.login()成功后再重定向到首页即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:15:05