为会话设置服务器端cookie的正确方法

时间:2016-11-09 15:41:39

标签: node.js express cookies server request

当用户点击某个端点时,我有以下在服务器上调用的函数,例如/api/login我在服务器上处理它,因为我想设置serverside 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);
});

1 个答案:

答案 0 :(得分:1)

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