【问题标题】:Can I add cookies to a webpack dev server proxy?我可以将 cookie 添加到 webpack 开发服务器代理吗?
【发布时间】:2016-04-22 11:37:09
【问题描述】:

我正在尝试在我的 webpack 开发服务器中设置代理。问题是我无法控制我要连接的服务器,我需要对请求进行身份验证。

有没有一种方法可以将 cookie 添加到我发送到代理服务器的请求中?我浏览了webpack dev server proxy server page 和它链接到的node-http-proxy 页面,我没有看到任何关于cookie 的提及。我也不确定是否有办法让我看到这些转发的请求,所以我不知道我正在尝试的任何事情是否正在做任何事情。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    如果您只需要为代理重写 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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          • 添加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));
                });
              },
            }
          
          

          【讨论】:

            猜你喜欢
            • 2020-11-23
            • 2017-09-12
            • 1970-01-01
            • 1970-01-01
            • 2018-07-02
            • 2017-10-25
            • 1970-01-01
            • 1970-01-01
            • 2017-04-15
            相关资源
            最近更新 更多