Access-Control-Allow-Headers не разрешен в предполетной подготовке, даже если я добавил его на стороне сервера

#reactjs #laravel #axios #cors #authorization

#reactjs #laravel #axios #cors #авторизация

Вопрос:

Я получаю эту ошибку при вызове API.

Прежде чем помечать как «дубликат», пожалуйста, прочитайте это.

Мой интерфейс находится в ReactJS, и я использую axios для запросов API серверную часть в Laravel (v5, старый проект). Каждый API выдает эту ошибку: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.

Я уже сделал следующее,

  • Добавлена политика cors для внутреннего сервера в качестве промежуточного программного обеспечения:

     class CORS {    
          /**
           * Handle an incoming request.
           *
           * @param  IlluminateHttpRequest  $request
           * @param  Closure  $next
           * @return mixed
           */
          public function handle($request, Closure $next) { 
              $headers = [
                  'Access-Control-Allow-Origin' => '*',
                  'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
                  'Access-Control-Allow-Headers' => '*',
                  // I have tried 'Authorization' instead of '*' also
                  'Content-Type' => 'application/json',
              ];
              if ($request->getMethod() == "OPTIONS") {
                  // The client-side application can set only headers allowed in Access-Control-Allow-Headers
                  return Response::make('OK', 200, $headers);
              }
    
              return $next($request)
                  ->header('Access-Control-Allow-Origin', '*')
                  ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS')
                  ->header('Access-Control-Allow-Headers', '*');
          }
     }
      

Есть ли какой-либо другой способ избавиться от ошибки CORS или я что-то здесь упускаю?

Обновите пример кода Axios в соответствии с запросом:

 axios.interceptors.request.use(function (config) {
// const token = get auth token from cookie/store
  config.headers = {
    'Authorization': token ? token : ''
  };
  return config;
});
  

Запрос Axios:

 Axios.get(myUrl)
  .then((response) => {
      // do something
  })
  .catch((err) => {
     // show error
  });
  

Комментарии:

1. не совсем уверен, поэтому я комментирую! но попробуйте специально установить авторизацию в качестве разрешающего заголовка. Нравится 'Access-Control-Allow-Headers' => ''authorization"

2. @saeedghotb Я тоже пробовал, все та же ошибка

3. отлично работает в моем проекте laravel 6, просто нужно было изменить Response::make на response(), можете ли вы также поделиться запросом axios?

4. @AkashSarode пожалуйста, проверьте обновленный вопрос для кода axios, и я попытался response() вместо Response::make , но безуспешно.

5. проходит ли ваш запрос через промежуточное ПО CORS? попробуйте запросить ПАРАМЕТРЫ с помощью postman.