NodeJS http代理中间件是否总是将cookie与请求沿着转发?

eh57zj3b  于 2023-02-18  发布在  Node.js
关注(0)|答案(1)|浏览(178)

我正在设置一个带有两个不同的React前端的nodejs API,发现我一直遇到CORS问题。
为了解决这个问题,我创建了3个服务器,2个用于前端,1个用于实际的API服务器,我的想法是,我将在2个代理服务器上进行身份验证,这些代理服务器上有react应用程序,然后将所有其他请求转发到api服务器,并在json web令牌中设置cookie的信息。
然而,在设置http-proxy-middleware并将changeOrigin设置为true时,我注意到cookie也会随请求沿着发送,这很棒。这就是changeOrigin要做的吗?它会对所有类型的请求都起作用吗?
下面是我设置代理选项的方法:

// routes
app.use('/api/auth', require('./routes/openRoutes/authRoutes'));

// api routes
const proxyOptions = {
  target: gateway.url, // target host
  changeOrigin: true,
  onProxyReq: function onProxyReq(proxyReq, req, res) {
    // add custom header to request
    const id = req.user ? req.user.id : null;
    const token = jwt.sign({
      data: id
    }, sessionSecret, { expiresIn: '1h' });

    if (token) {
      proxyReq.setHeader('authorization', `Bearer ${token}`);
    }
  },
  logLevel: 'debug',
};
app.use('/api/admin/user', createProxyMiddleware(proxyOptions));
camsedfj

camsedfj1#

changeOrigin除了Host之外,不会对cookie或任何其他请求头执行任何操作

选项.更改原点:真/假,默认值:false -将主机标头的来源更改为目标URL

所以如果你的请求是这样的...

GET /api/admin/user
Host: your.frontend.domain
Cookie: connect.sid=whatever

changeOrigin唯一改变的是Host

GET /api/admin/user
Host: your.gateway.domain
Cookie: connect.sid=whatever
Authorization: Bearer <your JWT token>

这样上游服务就可以将请求路由到适当的基于名称的虚拟主机。

相关问题