Обещания / наблюдаемые против перенаправления - PullRequest
0 голосов
/ 05 мая 2018

Сообщество Hello Stack,
Я собираюсь интегрировать некоторый сервер аутентификации, который будет делегировать активность входа в угловое приложение. Основной поток будет выглядеть следующим образом:

authService.login()
.then((res) => {
  /* Check login operation result, parse token */
})

Но учтите, что внутри функции входа в систему произойдет некоторое перенаправление (на внешний сервер входа в систему):

login() {
  window.location.replace('URL-to-auth-server')
}

Мой вопрос: если перенаправление произошло, то функция then после вызова login никогда не будет вызываться, так как перенаправление будет перезагружать содержимое страницы, javascritps будет запущен еще раз, даже возвращаясь на главную страницу?

Точнее говоря, интеграция касается KeyCloak и Angular 5. Только доступные сетевые ресурсы, связанные с сопряжением этих двух, используют подход «все или ничего»: перенаправление keycloak запускается перед процедурой начальной загрузки Angular. Если это не удается, приложение не будет загружаться. Я хотел бы отображать определенные части приложения без входа в систему, но ограничить некоторые вызовы API только для аутентифицированных пользователей.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Хорошо, я провел дополнительное исследование по этому вопросу, и результаты следующие:

Чтобы ответить на мой главный вопрос: Потоки Promises / Observables теряются, когда происходит перенаправление, что очевидно. Меня вводило в заблуждение решение по интеграции, предложенное KeyCloak, где имело место косвенное использование обещаний (то есть обещания использовались, только если пользователь уже вошел в систему):

  1. Перед загрузкой библиотека аутентификации веб-приложения инициализирована
  2. Библиотека при инициализации проверит, выполняет ли аутентификация cookie существует

    • Если да, он не будет перенаправлять, но через стандартный XHR проверьте это cookie и продолжить загрузку веб-приложения -> обещание будет работать нормально

    • Если нет, произойдет перенаправление на внешний сервер аутентификации. страница -> обещания не будут выполнены для этого приложения запустить

  3. После успешного входа в систему внешний сервер аутентификации перенаправить еще раз в веб-приложение (куки-файл аутентификации сохраняется) и снова запустится

0 голосов
/ 06 мая 2018

Я бы попробовал использовать одну из доступных библиотек. У меня был хороший успех интеграции KeyCloak и Angular с angular-oauth2-oidc Используйте Implicit Flow при перенаправлении на страницу входа KeyCloaks и получите токен доступа после входа в систему. Вы можете использовать Angular CanActivate Guard, чтобы сделать это на основе URL-адресов с ограниченным доступом. Это означает, что аутентификация / авторизация включаются только после того, как пользователь переходит по ограниченному пути, и токен доступа отсутствует в локальном хранилище.

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