Вызов URL с помощью токена авторизации с Fetch API - PullRequest
0 голосов
/ 14 апреля 2019

Я использую API Fetch для входа в мое веб-приложение с использованием аутентификации Baisc.После успешного входа в систему сервер возвращает токен как объект json.Затем я использую этот токен для отправки запросов другим конечным точкам API.Эти конечные точки просто показывают веб-страницу, если запрос содержит действительный токен.

Все работает нормально, но ничего не отображается в браузере после успешного вызова с API выборки.

Если яВызовите конечную точку API в клиенте REST, он возвращает HTML, который кажется нормальным.Кажется, проблема в том, что браузер должен вызывать URL, а не просто извлекать html.

Вот мой код.Я получаю оповещение «Успех» - так что все, кажется, работает нормально.Но мне нужно, чтобы браузер отображал результат в виде новой страницы (что-то вроде прямого вызова URL с токеном в заголовке).

function login(event) {
  event.preventDefault();
  let username = document.getElementById("username").value;
  let password = document.getElementById("password").value;
  let url = URL + 'login';
  let headers = new Headers();
  headers.append('Authorization', 'Basic ' + btoa(username + ":" + password));
  fetch(url, {method:'GET',
          headers: headers,
         })
  .then(function(response)
  {
    if (response.ok) {
      return response.json();
    } else {
      let error = document.getElementById("login-error");
      error.innerHTML = "Username/Password incorrect.";
    }
  })
  .then(function(json)
  {
    if (typeof(json) !== "undefined") {
      startWebapp(json.token);
    }
  })
  .catch(error => console.error('Error:', error));
}

function startWebapp(token) {
  let url = URL + 'webapp/overview';
  let headers = new Headers();
  headers.append('Authorization', 'Bearer ' + token);
  fetch(url, {method:'GET',
headers: headers,
})
.then(function(response) {
  alert("Success!");
  return response;
});
}

Как мне добиться, чтобы браузер действительно вызывалURL с токеном API и открывает его, если выборка прошла успешно?

1 Ответ

0 голосов
/ 14 апреля 2019

Для тех, кто ищет решение: на самом деле это невозможно с JavaScript или API выборки.Для меня (самое простое) решение - сохранить токен в cookie.Затем сервер ищет токен в cookie и использует его для аутентификации / авторизации.Это работает довольно хорошо, и мне не нужно отправлять токен при каждом запросе.

Надеюсь, это поможет.

...