【问题标题】:Correct way to set server side cookies for sessions为会话设置服务器端 cookie 的正确方法
【发布时间】:2017-03-23 11:43:47
【问题描述】:

当用户点击某个端点时,我在服务器上调用了以下函数,例如/api/login 我在服务器上处理它,因为我想设置服务器端 cookie 来存储身份验证令牌。目前它看起来像这样:

const createSession = (req, res, url) => {
  const apiCall = request.post(url, (err, response, body) => { // eslint-disable-line
    if (err) return res.sendStatus(500);
    else if (response.statusCode !== 200) return res.status(response.statusCode).send(body);
    const data = JSON.parse(body);
    const options = { path: '/', hostOnly: true, httpOnly: true, maxAge: 3300000 }; // 55 min expiration
    if (secrets.DOMAIN !== 'localhost') options.secure = true;
    res.cookie('SESSION_TOKEN', data.token, options);
    res.cookie('SESSION_EMAIL', data.email, options);
    res.status(200).send(body);
  });
  req.pipe(apiCall);
};

它有效,但我发现它非常冗长,并且不确定是否有更好的方法来处理这个问题,也许除了请求库之外还有其他方法?我试图用节点的 http 来解决这个问题,但从来没有。

这是在我的快递服务器中使用此功能的示例:

app.post('/api/login', (req, res) => {
  const url = `${secrets.API_HOST}/login`;
  createSession(req, res, url);
});

【问题讨论】:

    标签: node.js express cookies server request


    【解决方案1】:

    我建议express-session,但这部分取决于您的用例。

    【讨论】:

    • 我正在研究这个,但它似乎是更复杂的问题解决方案,也许我遗漏了什么?如果您可以扩展,将不胜感激:) 我想要实现的基本上是将用户电子邮件和身份验证令牌存储在会话/会话 cookie 中,以便每个需要身份验证的 api 调用都会在标头中使用这些。通过像现在这样拥有它们(cookie),我可以从那里获取这些数据。
    • 嗯,这确实是一个更复杂的解决方案,但事实是,它使用cookie在后台存储会话ID。是的,您可以像req.session.<your variable name> = <value>一样将数据保存在会话中,基本上任何东西,并且它存在于该用户的所有请求中。在内部,正如我所说,它使用 cookie 将会话映射到对象,检查非活动会话并删除属性以允许 GC 收集它们。
    猜你喜欢
    • 2011-07-14
    • 2020-02-07
    • 2020-11-08
    • 2012-09-14
    • 2019-10-20
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多