Условие CORS Access-Control-Allow-Origin в Express.js - PullRequest
0 голосов
/ 03 января 2019

Это вопрос стратегии, которую нужно принять и разрешить мои сомнения по поводу идеи, которая у меня есть.

Я хочу разрешить запросы CORS, т.е.Access-Control-Allow-Origin зависит от типа среды, которую я имею.Итак, вот мои заголовки cors:

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', 'https://siteone.com');
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, access-control-allow-origin');
  next();
});

Но я хочу, чтобы условная логика была такой:

const ACAOSite = process.env.NODE_ENV == 'production' ? 'https://siteone.com' : 'https://sitetwo.com';

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', ACAOSite);
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, access-control-allow-origin');
  next();
});

Хотя это хорошая практика?Есть ли другой способ сделать это?Кроме того, я не хочу разрешать каждый сайт и использовать *, я хочу выбирать, какой сайт я хочу разрешить.

1 Ответ

0 голосов
/ 04 января 2019

Используйте dotenv или файл конфигурации для установки разрешенных источников.

Точно так же вы могли бы использовать разные конфигурации для учетных данных вашей базы данных при тестовом / производственном чтении из .env (используя dotenv ) или из файла конфигурации, который можно изменить на сервере.

Например, если ваш файл .env содержит:

allowed_origins=https://siteone.com

Тогда ваш код будет выглядеть примерно так:

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', process.env.allowed_origins);
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, access-control-allow-origin');
  next();
});

Вы также можете иметь более одной исходной запятойнапример,

allowed_origins=https://siteone.com, https://siteone-server2.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...