2

サーバーから別のサーバーへの投稿リクエストを行っています。そのために、ライブラリ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)
});

セッションはこの投稿を呼び出す前に初期化されていますが、実行するとセッションがリセットされます。したがって、この場合、セッション var から csrf コードを失います。

エラーは「パイプ」関数にあります。これを呼び出すと、他の場合ではなくセッションが失われるためですが、それを使用する必要があります。

実際のセッションを失わずにパイプ機能を使用するにはどうすればよいですか?

4

3 に答える 3

1

他の回答で述べたように、エクスプレス セッションは、他のサーバーから送信された Cookie によってリセットされています。

この問題を解決するには、いくつかの方法があります。請願サーバーからの Cookie が必要ない場合は、応答をパイプする前にヘッダーを削除できます。

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

ヘッダーを変更したくない場合は、コンテンツ タイプとともに応答ハンドラー内で応答をパイプできる必要があります。

router.post('/myServerUrl', function(req, res) {
  request.post('/remoteServerUrl', { data })
    .on('response', function(response) {
      res.set('Content-Type', 'image/jpeg')
      response.pipe(res);
    });
});
于 2016-10-26T16:01:50.930 に答える
1

エクスプレスセッションはセッションをクッキーに保存していると思います。あなたがしているのは、config.petitionServer + pathクライアントからのホールレスポンスをパイプすることで、エクスプレスセッションが保存したクッキーを上書きすることです。たぶん、応答の本体をパイプするだけの方が良い考えでしょうか?

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);
});
于 2016-02-14T21:22:50.530 に答える
0

私は解決策を確立しましたが、それは私の悪いことでした。

セッションが開始されreq.session、請願サーバーは Express-session モジュールも使用していました。要求が請願サーバーによって受信されたとき、これはセッション変数を請願サーバーのものに置き換えました。

解決策は、請願サーバーから Express-session モジュールを削除することでした。

もう1つの解決策は、ホストサーバーからセッションを管理して、セッションを置き換えないようにすることです。しかし、私はそれをしませんでした

于 2016-02-14T21:31:52.507 に答える