我正在尝试使用 node.js 和 javascript 将我的 cors origins 值设置为受信任的子域列表

I'm trying to set my cors origins value to a list of trusted subdomains, using node.js and javascript

我的设置出了问题。我想知道这是否是我在 .env 文件中定义允许来源列表的方式。

在我的 .env 文件中,我有一个受信任的子域列表:

// .env file
ALLOWED_ORIGINS=http://localhost:3001, http://localhost:3000, https://wwww.site1.com, https://www.site2.com

在我的 server.ts 文件中,我试图将 origins 设置为我的 .env 文件中的值,请参阅行 origins: allowedOrigins。之前设置为 origins: ['*']

// server.ts file

export default createServer = (container) => {
  const env = process.env.NODE_ENV
  const allowedOrigins = process.env.ALLOWED_ORIGINS || ''

  const cors = Cors({
    origins: allowedOrigins,
    allowedHeaders: [
      'access-control-allow-origin',
      'authorization',
      'Pragma',
      'contact',
    ],
    exposeHeaders: []
  })
}

我检查了 cors npm pageorigins 选项 接受逗号分隔字符串中的多个来源。它接受 array 代替。

您可以用“,”分割您的环境变量以获得所需的格式。在下面的代码中,我添加了 .trim() 方法来减少字符串中不必要的空格。

// server.ts file

export default createServer = (container) => {
  const env = process.env.NODE_ENV
  const allowedOrigins = process.env.ALLOWED_ORIGINS || ''
  const allowedOriginsArray = allowedOrigins.split(",").map(item => item.trim());

  const cors = Cors({
    origins: allowedOriginsArray,
    allowedHeaders: [
      'access-control-allow-origin',
      'authorization',
      'Pragma',
      'contact',
    ],
    exposeHeaders: []
  })
}

你只需要用逗号分隔它们

const allowedOrigins = process.env.ALLOWED_ORIGINS.split(",") || '';

此外,

我相信它只是 origin 而不是 origins

对于以下内容,allowedOrigins 必须是一个数组。所以你只需映射 return 一个数组

const allowedOrigins = process.env.ALLOWED_ORIGINS.split(',').map(origin=>origin);

const cors = Cors({
    origin: (origin, callback) => {
        allowedOrigins.includes(origin) ? callback(null, true) : callback(new Error('Not allowed by CORS'))
    },
    allowedHeaders: [
      'access-control-allow-origin',
      'authorization',
      'Pragma',
      'contact',
    ],
    exposeHeaders: []
  })
}

参考:- https://www.npmjs.com/package/cors