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

Posted

技术标签:

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

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

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

有什么想法吗?

【问题讨论】:

【参考方案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));
      );
    ,
  

【讨论】:

以上是关于我可以将 cookie 添加到 webpack 开发服务器代理吗?的主要内容,如果未能解决你的问题,请参考以下文章

angular2-webpack-starter 如何将 NodeJS 服务器添加到项目中

将 https 添加到 webpack 代理的 graphql express 端点

如何通过 webpacker 将 jstree 添加到 Rails

我试图通过Webpack将Quilljs添加到Rails 5.1应用程序中

HttpWebRequest:将 Cookie 添加到 CookieContainer -> ArgumentException(参数名称:cookie.Domain)

如何将 cookie 添加到拖放 div