Создайте промежуточное ПО:
const allowCORS = function(req, res, next) {
var origin = req.get('origin');
res.header("Access-Control-Allow-Origin", origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
};
const allowAllIfAuthorized = function(req, res, next) {
if (req.isAuthorized) {
return allowAll(req, res, next);
}
next();
};
const allowedTokens = [...];
const isAuthorized = function(req, res, next) {
req.isAuthorized = (
req.query.accessToken
&& allowedTokens.includes(req.query.accessToken)
);
next();
}
и присоедините его по определенным маршрутам:
app.get('/', (req, res) => res.render('index'));
app.use(
'/api',
allowCORS, // allow cors for public api
require('./api'));
app.use(
'/private/api',
isAuthorized, allowCORSIfAuthorized, // allow cors if user authorized
require('./private/api'));
Я бы хотел создать API Publi c для серверной части, однако , авторизованный с помощью токена, а не по источнику.
, поэтому везде должно быть правило всех правил. Вы запрещаете частный доступ, используя токены доступа, которые будут иметь авторизованные пользователи.
Сводка : CORS не является брандмауэром (привратником) от неавторизованных пользователей