В настоящее время я создаю приложение, используя стек MERN, и у меня возникают проблемы с доступом к моему REST API. Он может получать данные, используя запрос get, но запись данных, похоже, не удалась.
У меня есть этот блок кода перед объявлением моих маршрутов:
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'https://staging.domain.io');
res.header('Access-Control-Allow-Methods', 'GET, OPTIONS, PUT, POST, DELETE');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
res.header('Access-Control-Allow-Credentials', true);
next();
});
Я использую ax ios в интерфейс для выполнения этих вызовов API и установки атрибута withCredentials в значение true
Некоторые замечания, которые могут пригодиться:
Я делюсь своими cookie-файлами в своих доменах и поддоменах, используя cook ie -session (объявлено ПЕРЕД настройкой CORS (приведенный выше код)
app.use(
session({
maxAge: 24 * 60 * 60 * 1000,
keys: [process.env.SESSION_ENCRYPTION],
domain: 'domain.io',
signed: true,
httpOnly: false,
secure: false
}));
Это не удалось только при развертывании в GCP, оно работало нормально на localhost.
Что я до сих пор пробовал:
Использовал пакет промежуточного программного обеспечения express cors и настроил его следующим образом:
app.use(
cors({
origin: 'https://staging.domain.io/',
credentials: true
})
);
app.options(
"*",
cors({
origin: 'https://staging.domain.io/',
credentials: true
})
);
Похоже, что этот код не меняет поведение вообще, так как не было ничего другого, независимо от того, если этот код помещен. Однако, если я сохраню этот код и удаляю код в самом верху, весь API завершается ошибкой (даже запросы GET).
Так что теперь я как бы застрял в том, как go об этой проблеме. у предложений?
Спасибо!