Express + Паспорт + CORS: сеанс разрешен для нескольких доменов - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь заставить внешний интерфейс (React JS) работать с моим внутренним сервером (Express JS). Я все еще борюсь с CORS. CORS-запросы по-прежнему блокируются.

Согласно документации CORS Я установил для своего экземпляра Express использование cors() в качестве промежуточного программного обеспечения:

const app = express();

// Middlewares
const whitelist = [
    'http://localhost:3000',
    'http://localhost:3001'
];
const corsOptions = {
    origin: function (origin, callback) {
      if (whitelist.indexOf(origin) !== -1) {
        callback(null, true);
      } else {
        callback(new Error('Not allowed by CORS'));
      }
    }
};
app.use(cors(corsOptions));

Если кто-то спрашивает, почему я вообще использую CORS с localhost, это потому, что мне сказали сделать это, поскольку мне приходилось отправлять withCredentials: true заголовок от ax ios запросов на сохранение сеанса после входа в систему.
Я только что добавил axios.defaults.withCredentials = true для перехвата запросов во внешнем интерфейсе.

То, как он работал до добавления дополнительных доменов в corsOptions, настраивало промежуточное ПО, чтобы сервер мог работать с внешним интерфейсом:

export const setHeaders = (req, res, next) => {
    res.header('Access-Control-Allow-Origin', process.env.APP_URL);
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    next();
};
...
app.use(setHeaders);

Если удалить предыдущий код, он не будет работать даже для одного домена.

Итак, что мне нужно изменить, чтобы сервер мог получать данные из нескольких доменов? Заранее спасибо.

1 Ответ

0 голосов
/ 22 марта 2020

Добавить параметры credentials и allowedHeaders в конфигурацию corsOptions

credentials: true,
allowedHeaders: ['Origin, X-Requested-With, Content-Type, Accept'],

Чтение https://www.npmjs.com/package/cors#configuration -опции

Кроме того, вы можете добавлять в белый список домены с помощью 127.0.0.1, так как вы можете захотеть получить к ним доступ через localhost или 127.0.0.1

Полный код

const app = express();

// Middlewares
const whitelist = [
    'http://localhost:3000',
    'http://127.0.0.1:3000'.
    'http://localhost:3001',
    'http://127.0.0.1:3001',
];
const corsOptions = {
    credentials: true,
    allowedHeaders: ['Origin, X-Requested-With, Content-Type, Accept'],
    origin: function (origin, callback) {
      if (whitelist.indexOf(origin) !== -1) {
        callback(null, true);
      } else {
        callback(new Error('Not allowed by CORS'));
      }
    }
};
app.use(cors(corsOptions));
...