【问题标题】:Can I access cookie from ejs page in server-side not the browser-side?我可以从服务器端而不是浏览器端的 ejs 页面访问 cookie 吗?
【发布时间】:2018-01-31 15:23:59
【问题描述】:

我需要在一个环境下检查登录状态的例程 - node.js、express、ejs。

我想我需要在服务器端而不是浏览器端检查所有 ejs 视图页面中的登录状态。

为此,我认为我需要在 ejs 页面中编写代码来查找和查找 一个 cookie - 这个 cookie 证明用户已经正确登录。

我可以从 ejs 页面访问浏览器 cookie 吗?

如果是这样,你能指导我如何从 ejs 页面访问 cookie 吗?

我可以使用 ejs 的 cookie-parser 模块吗?

如果在ejs页面中没有办法从服务器端访问cookie,我相信我只需要在浏览器端访问cookie。这是处理登录的正常方式吗?

【问题讨论】:

    标签: node.js express cookies ejs


    【解决方案1】:

    所以你想跟踪用户的会话。您可以执行以下操作来实现此目的。

    当用户使用正确的凭据成功登录时,将该用户详细信息添加到会话中。

    if(loginSuccess){
        req.session.user = userObject;
    }
    

    添加一个中间件,从会话中读取用户并将其放入 res.locals 中,以便您可以访问 ejs 文件中的 userObject。

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

    现在您将在您的 ejs 文件中使用 userObject,因此请在 ejs 文件中相应地编写您的逻辑。假设您想在用户未登录时显示登录并在您登录时注销,您可以添加如下代码

     <% if(user && user.email){ %>
        <a href="/logout">Logout</a>
     <% } else { %>
        <a href="/login">Login</a>
     <% } %>
    

    【讨论】:

      【解决方案2】:

      浏览器 Cookie 值可在 req.headers.cookie 中找到。

      例如:

      在控制台中打印 cookie:

      router.get("/example"), (req, res) => { console.log(req.headers.cookie); }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多