React не будет вызывать серверную часть (узел) из-за ошибки CORS

#node.js #reactjs #api #security #cors

#node.js #reactjs #API #Безопасность #cors

Вопрос:

Наше клиентское приложение при запросе входа в систему отправляет проблему CORS. API завершается с ошибкой CORS: не разрешен предварительный подстановочный знак origin . Это Post-запрос. Мы начали обмениваться файлами cookie с клиентом, и эта проблема внезапно возникла.

Что мы добавили :

  1. Мы добавили значения withCredentials: true [на стороне клиента]
  2. На стороне сервера мы включили 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'}))