NodeJS 请求重置会话

NodeJS request reset session

我正在执行从我的服务器到另一台服务器的 post 请求,为此我正在使用库 https://github.com/request/request

所以,我使用下一个代码:

router.post('/extern/*', function(req, res, next) {
    var path = req.params['0'];
    var input = req.body.text;
    var encript = crypto.encrypt(input);

    request.post(config.petitionServer + path).form({data: encript}).pipe(res)
});

会话在调用这个post之前已经初始化,但是当它执行时,会话被重置。因此,在这种情况下,我丢失了会话变量中的 csrf 代码。

错误在 'pipe' 函数中,因为如果我调用它,我会丢失会话,在其他情况下不会,但我需要使用它。

如何在不丢失实际会话的情况下使用管道功能?

我相信 express-session 正在将其会话保存到 cookie 中,而您正在做的是将空洞响应从 config.petitionServer + path 传输到客户端,以便它覆盖 express-session 保存的 cookie。也许只是通过管道传递响应的主体会更好?

router.post('/extern/*', function(req, res, next) {
var path = req.params['0'];
var input = req.body.text;
var encript = crypto.encrypt(input);

request.post({url: config.petitionServer + path, formData: {data: encript}, function(err, httpResponse, body))
    res.send(body);
});

我创建了解决方案,但这是我的错。

会话在 req.session 中,请愿服务器也在使用 express-session 模块。当请愿服务器收到请求时,这个服务器用请愿服务器之一替换了会话变量。

解决方案是从请愿服务器中删除 express-session 模块。

另一种解决方案是从主机服务器管理会话以防止替换它。但是我没有做

如其他答案中所述,您的快递 session 正在被从其他服务器发送的 cookie 重置。

有几种方法可以解决这个问题。如果您不需要请愿服务器中的 cookie,您可以在传输响应之前删除 header:

router.post('/myServerUrl', function(req, res) {
  request.post('/remoteServerUrl', { data })
    .on('response', function(response) {
      delete response.headers['set-cookie'];
    })
    .pipe(res);
});

如果您不想修改任何 header,您应该能够将响应与内容类型一起通过管道传输到响应处理程序中。

router.post('/myServerUrl', function(req, res) {
  request.post('/remoteServerUrl', { data })
    .on('response', function(response) {
      res.set('Content-Type', 'image/jpeg')
      response.pipe(res);
    });
});