当用户使用节点 js 和 ejs 登录时隐藏登录和注册按钮并显示注销按钮

hide login and sign up buttons and display logout button when user logs in using node js and ejs

我已经使用节点 js、ejs 和 mongodb 成功创建了我的第一个 Web 应用程序。

我想在用户登录时隐藏我的 login/sign 向上链接,并希望在我的头文件中显示注销按钮。

有人有解决办法吗?我已经试过了 Expressjs how to show / hide a div in case user its logged 但是由于某些原因,ejs文件中的user变量被初始化为null,所以只有一种情况正在执行

这是我的 header.ejs 文件:

<h1><a href="/">RideShare</a></h1>

<ul>
    
    
    <li><a href="/find">Find a ride</a></li>
    <li><a href="/create">Create a ride</a></li>
    <li><a href="/myrides">My rides</a></li>
    <%if (!user) { %>
        <li><a href="/login">Sign in</a></li>
        <li><a href="/register">Sign Up</a></li>
        <% }else{ %>
            <form action="/logout?_method=DELETE" method="POST">
                <button type="submit">Log Out</button>
            </form>
            <%}%>
    
</ul>

我认为您应该在本地会话登录后设置用户数据

server.js

app.use(function (req, res, next) {
    res.locals.session = req.session;
    next();
});

headers.ejs

<h1><a href="/">RideShare</a></h1>

<ul>
    
    
    <li><a href="/find">Find a ride</a></li>
    <li><a href="/create">Create a ride</a></li>
    <li><a href="/myrides">My rides</a></li>
    <%if (!locals.session.loggedin) { %>
        <li><a href="/login">Sign in</a></li>
        <li><a href="/register">Sign Up</a></li>
        <% }else{ %>
            <form action="/logout?_method=DELETE" method="POST">
                <button type="submit">Log Out</button>
            </form>
            <%}%>
    
</ul>

并将其输入您的登录名API

router.post('/login', (req, res) => {
    req.session.loggedin = true
})