Угловые глобальные функции - PullRequest
0 голосов
/ 28 января 2019

Я создаю угловое приложение, которое поддерживает аутентификацию JWT.Я создаю свой JWT-сервер, используя Spring Boot.Пользователь предоставляет свои учетные данные для аутентификации.После успешной аутентификации пользователю будет отправлен ответ, содержащий маркер доступа и аутентификацию.В моем токене доступа JWT содержится значение exp, содержащее срок жизни токена.Токен обновления сохраняется в БД.Чтобы получить новый токен доступа, вы должны отправить запрос с этим заголовком --- >>> X-Auth: refreshToken <<< ---, чтобы получить новый токен доступа.Я реализовал функцию, которая будет повторно отправлять запрос на токен доступа, используя токен обновления.Я пытался реализовать функцию для запуска функции в глобальном масштабе, но безрезультатно.Я хотел бы узнать, есть ли способ, как я мог бы запустить функцию один раз глобально в моем угловом приложении. </p>

/***Login sample request***/
{
    "password": "secret123",
    "username": "nkengbeza"
}

/***Login sample response***/
{
    "access_token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJua2VuZ2JlemEiLCJhdXRoIjpbeyJhdXRob3JpdHkiOiJBRE1JTiJ9XSwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImlhdCI6MTU0ODY2OTE0MSwiZXhwIjoxNTQ4NjcyNzQxfQ.oaWOIaeMqLg35unM82bcNg88ga030m5J1k7E5EM2O0s",
    "refresh_token": "a102c7a063c7f149bcb276eadf83c0c61659ff9b37c0a8ab7d29e92c08ac94e7aa99abc5e9a3c1c59da4e66f1ada0c6a02dca2f577a4aa3f81885c73f5a879d1"
}

/***Request for an access token using a valid refresh token***/
reLogin() {
    (async () => {
      const resp = await fetch(AppRoutes.RELOAD_AUTH, {
        method: 'POST',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
          'X-Auth': this.getAuth().refreshToken
        }
      });

      if (resp.status !== 200) {
        this.doLogout();
      }

      const content = await resp.json();

      const accessToken = content.access_token;
      const tokenInfo = this.getDecodedAccessToken(accessToken); // decode token
      const auth = new Auth();

      auth.refreshToken = content.refresh_token;
      auth.role = tokenInfo.auth[0];
      const expireDate = tokenInfo.exp; // get token expiration dateTime

      this.setAccessToken(accessToken);
      this.setAuth(auth);

    })();
  }
...