#node.js #reactjs #api #security #cors
#node.js #reactjs #API #Безопасность #cors
Вопрос:
Наше клиентское приложение при запросе входа в систему отправляет проблему CORS. API завершается с ошибкой CORS: не разрешен предварительный подстановочный знак origin . Это Post-запрос. Мы начали обмениваться файлами cookie с клиентом, и эта проблема внезапно возникла.
Что мы добавили :
- Мы добавили значения withCredentials: true [на стороне клиента]
- На стороне сервера мы включили res.header с почти всеми разрешенными значениями контроля доступа. И ни один из них не является символом подстановки. (добавлены скриншоты) .
Мы не используем подстановочный знак ни в одном заголовке, тем не менее API выдает эту ошибку, поскольку подстановочный знак CORS не разрешен.
Вызов API на стороне клиента.:
ОБНОВЛЕНИЕ: мы смогли решить эту проблему, добавив значение Allow origin к нашему значению библиотеки CORS, которое мы использовали (при загрузке сервера). Библиотека CORS (я не знаю, как и почему, но) переопределяет назначенный источник на «*», если ничего не указано.
app.use(cors({credentials: true, origin: 'http://localhost:3000'}))
Комментарии:
1. Вы устанавливаете безопасный файл cookie в localhost. Это может быть проблемой.
2. Привет, @LakshyaThakur Спасибо за ваш ответ, но, похоже, проблема не в этом. Я проверил, удалив его, все еще получая ту же ошибку. Кроме того, выполнение метода на серверной части даже не запускается.
3. Hmn. Я предполагаю, что ваша функция accessControlResponse является первой промежуточной функцией, которая запускается при поступлении запроса.
4. Привет @LakshyaThakur Да, именно так я его и добавил. Я также пробовал жестко запрограммировать его прямо перед значением res.json. Оно по-прежнему не работает. Я попытался удалить часть «withCredentials: true» со стороны клиента, чтобы она получила ответ. (Однако в этом случае файлы cookie не регистрируются.)
5. Пожалуйста, размещайте текст как текст, а не как изображения текста, как для A11Y, так и для мобильных устройств. Большая часть кода — это текст. Пожалуйста, публикуйте ответы как ответы, а не как часть вопроса.
Ответ №1:
Это можно решить, разрешив использование origin для нашей библиотеки CORS (при загрузке сервера). Библиотека CORS (я не знаю, как и почему, но) переопределяет назначенный источник на «*», если ничего не указано.
app.use(cors({credentials: true, origin: 'http://localhost:3000'}))