如果用户已登录,如何检查布局

How to check in layout if user is logged in

如题。 我有布局:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
     <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
    <link
      rel="stylesheet"
      href="https://bootswatch.com/4/journal/bootstrap.min.css"
    />
    <title>Node.js & Passport Login App</title>
  </head>
  <body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor03" aria-controls="navbarColor03" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>

      <div class="collapse navbar-collapse" id="navbarColor03">
        <ul class="navbar-nav mr-auto">
          <form class="form-inline my-2 my-lg-0">
            <input class="form-control mr-sm-2" type="text" placeholder="Search">
            <button class="btn btn-secondary my-2 my-sm-0" type="submit">Szukaj!</button>
          </form>
          <li class="nav-item active">
            <a class="nav-link" href="/index">Strona Główna
              <span class="sr-only">(current)</span>
            </a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">O nas</a>
          </li>
        </ul>
        <ul class="navbar-nav">
          <li class="nav-item">
            <%if (!isLoggedIn) { %>
              <div> <a class="nav-link" href="/users/logout">Wyloguj</a></div>
            <% } %>
              <%if (isLoggedIn) { %>
                <div> <a class="nav-link" href="/users/login">Zaloguj</a></div>

              <% } %>

          </li>
        </ul>
      </div>
    </nav>
    <div class="container"><%- body %></div>

    <script
      src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
      integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"
      integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"
      integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k"
      crossorigin="anonymous"
    ></script>
  </body>
</html>

还有一些路线,例如注册视图,我在其中检查用户是否已登录(无法注册)等

router.get('/register', (req, res) =>
    res.render('register',{isLoggedIn:isLoggedIn()}));

我有两个问题:

1)<%if> 在我的布局中不起作用(我不知道为什么)

2)如何将用户状态(登录或未登录)注入布局?我不想在我的视图中重复布局中的所有代码。

  1. 我认为您已经交换了 login/logout 个元素。因为 !isLoggedIn 应该是 Zaloguj,因为 isLoggedIn 应该是 Wyloguj。 通常,我附加以呈现一些(不是全部,因为它可以包含密码哈希)用户数据 res.render(‘register’, { user }) 你会需要它们,你会想要显示登录的用户名左右。 那么:
    <% if (user) { %>
      <h2><%= user.name %></h2>
    <% } %>
  1. 如果您有一部分 ejs 想要在其他模板中使用,只需使用 includes:
<div id=“parent_div”>
  <div id=“register_div”>
    <% include('register.ejs') %>
  </div>
  <div id=“mainbody_div”>
    <% include('body.ejs') %>
  </div>
<div>

我解决了我的问题 - 感谢@Fide 告诉我错误所在的方法!

router.get('/register',
    function (req,res){
    res.render('register', {user: req.User} )
    });

我必须从请求中获取用户 - 很简单,但我花了很多时间!