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



当用户到达某些端点时,我有以下函数在服务器上调用,例如/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);
});

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

相关内容

最新更新