Почему при вызове api из приложения React отсутствует заголовок 'www-authenticate'? - PullRequest
1 голос
/ 22 апреля 2020

Я звоню в проект веб-API из приложения React. API использует JWT для аутентификации. Если приложение предоставляет API с токеном JWT с истекшим сроком действия, оно получает ожидаемый ответ 401, но заголовок 'www-authentication' (который включает в себя сообщение о том, что причина 401 связана с токеном с истекшим сроком действия).

Если я запускаю Fiddler во время запроса и проверяю ответ, я вижу, что присутствует заголовок:

HTTP/1.1 401 Unauthorized
Date: Wed, 22 Apr 2020 01:07:32 GMT
Server: Kestrel
Content-Length: 0
WWW-Authenticate: Bearer error="invalid_token", error_description="The token expired at '04/21/2020 17:33:17'"
Access-Control-Allow-Origin: *

Но объект ответа на ошибку, полученный моим приложением React (которое использует ax ios для вызова API) не имеет заголовка 'www-authenticate':

Ответ, как показано в консоли

Вот код вызова:

async function getAllParts() {

  const gpuUrl = urls.apiGetGpuUrl;
  const moboUrl = urls.apiGetMoboUrl;
  const cpuUrl =urls.apiGetCpuUrl;
  const ramUrl =urls.apiGetRamUrl;

  const requestOptions = {
    method: 'GET',
    headers: authHeader()
  };

  const gpuData = axios.get(gpuUrl, requestOptions);
  const moboData = axios.get(moboUrl, requestOptions);
  const cpuData = axios.get(cpuUrl, requestOptions);
  const ramData = axios.get(ramUrl, requestOptions);
  try{
    const response = await Promise.all([gpuData, moboData, cpuData, ramData]);
    return handleMultipleResponses(response);
  } catch(error){
    console.log(error); // This error contains a response object with no 'www-authenticate' header
  }  
}

Как уже упоминалось, я могу видеть из Fiddler, что ответ содержит заголовок, но как я могу получить к нему доступ из своего приложения? Вызов API от почтальона дает ожидаемый результат с присутствующим заголовком:

Ответ, как показано в Почтальоне

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ:

Просто добавить для пояснения, в коде вызова, функция 'authHeader ()' устанавливает заголовок следующим образом:

export function authHeader() {
  let user = JSON.parse(localStorage.getItem('user'));
  if (user && user.token) {
      return { 'Authorization': 'Bearer ' + user.token };  //     
  } else {
      return {};
  }
}

Я считаю, что это будет установлено правильно, так как данные успешно извлекаются, когда срок действия JWT не истек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...