我可以将cookie添加到webpack dev服务器代理吗?

时间:2016-01-17 05:24:42

标签: node.js cookies proxy webpack webpack-dev-server

我试图在我的webpack dev服务器中设置代理。问题是我无法控制我要连接的服务器,我需要验证请求。

有没有办法可以将cookie添加到我发送给代理服务器的请求中?我查看了webpack dev server proxy server page以及它链接到的node-http-proxy页面,但我没有看到任何提及Cookie的内容。我也不确定是否有办法让我看到这些转发的请求,因此我无法判断我尝试的是否正在做任何事情。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

如果您只需要为代理重写cookie域,请在node-http-proxy中查看cookieDomainRewrite选项。

此外,如果您想找到一种方法在请求/响应的cookie周围注入自定义行为,那么请查看您可以挂钩的事件:

proxy.on('proxyRes', function (proxyRes, req, res) {
    console.log('RAW Response from the target',JSON.stringify(proxyRes.headers, true, 2));
});


proxy.on('proxyReq', function (proxyRes, req, res) {
    console.log('RAW Request from the target',JSON.stringify(proxyReq.headers, true, 2));
});

https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events

可以将这些选项添加到devServer代理的webpack.config.js中,如下所示:

{
    devServer: {
        proxy: {
            onProxyReq: function(proxyReq, req, res){
                proxyReq.setHeader('x-added', 'foobar');
            },
            cookieDomainRewrite: ""
        }
    }
}

https://github.com/chimurai/http-proxy-middleware#http-proxy-events

答案 1 :(得分:1)

在进一步研究之后,看起来开发服务器似乎只会转发您发送的任何cookie。不适用于我试图进行的身份验证,我猜亚马逊有一些我无法解释的安全性,但这就是答案。

将cookie添加到您要发送到开发服务器的请求中,并正确设置代理。

答案 2 :(得分:0)

我编写了一个小插件,可以轻松地将cookie添加到webpack-dev-server:https://github.com/ktmud/http-proxy-middleware-secure-cookies

它将在需要时自动提示您输入身份验证cookie,并在可能的情况下将您的输入存储在系统钥匙串中。

答案 3 :(得分:0)

就我而言,这是解决方案:

  • 添加 cookie-parser(来自 npm 或 yarn),例如:yarn add 'cookie-parser' --dev
  • 然后在devServer中,让它像
const cookieParser = require('cookie-parser') // put at the top

...
devServer: {
    before(app) {
      app.use(cookieParser())

      app.all('/my/route1/', (req, res) => {
        const result = {msg: 'setting cookie'}
        res.cookie('foo', 'bar') // set cookie
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(result));
      });

      app.all('/my/route2', (req, res) => {
        const result = {
          my_cookie: req.cookies['foo'], // get cookie
        }
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(result));
      });
    },
  }