Получение кода ошибки 401 при использовании fetch () с настраиваемым заголовком - PullRequest
0 голосов
/ 05 мая 2020

===

Я создал собственный API с AWS API Gateway. Для одного из методов я включил проверку авторизации с помощью лямбда-функции. Чтобы заставить его работать, мне нужно добавить следующий ключ: Key: authorizationToken Value: allow.

Я протестировал его с помощью Postman, и он работает нормально, мой POST обработан, и я получаю ответ.

Я только начинаю с Javascript, поэтому я использовал код, предоставленный в Postman. Вот он:

function getData(event){
    var myHeaders = new Headers();
    myHeaders.set("authorizationToken", "allow");

    var requestOptions = {
      method: 'POST',
      mode: 'no-cors'
    };

    fetch("https://[THE_URL_OF_MY_API]/prod/counter", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
}

И я получаю следующее сообщение об ошибке в консоли.

script.js:49 POST https://[THE_URL_OF_MY_API]/prod/counter 
net::ERR_ABORTED 401 (Unauthorized)
getData @ script.js:49

Я просмотрел журналы API-шлюза в AWS, чтобы устранить его:

  • Но я не вижу никаких журналов, поэтому кажется моя выборка блокируется еще до отправки.
  • Я проверил заголовки успешного вызова API, отправленного почтальоном, и не могу найти ни одного заголовка, кроме моего и заголовка, автоматически сгенерированного приложением.

Что я делаю не так?

Примечание: я использую аналогичный код для другой конечной точки, где авторизация не включена, и она работает нормально. Я думаю, мой заголовок установлен неправильно.

Спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

@ CRice, Салмин Скендерови c, Яроманда X: Большое спасибо за ваш отзыв.

Отсутствие myHeaders было опечаткой, я исправил ее. Увидев комментарий о 'no-cors', я изучил его, включил CORS, разрешил мой заголовок c в Access-Control-Allow-Headers.

И теперь он работает нормально.

Мой измененный код:

    var myHeaders = new Headers();
    myHeaders.set("authorizationToken", "allow");

    var requestOptions = {
      method: 'POST',
      redirect: 'follow',
      headers : myHeaders
    };

    fetch("https://[URL_OF_MY_API_ENDPOINT]/prod/counter", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));

Конфигурация моего шлюза API: Конфигурация моего шлюза API

...