Компонент загружается до того, как canActivate возвращает результат в угловом 4 при интеграции с keycloak - PullRequest
0 голосов
/ 26 февраля 2019

Я интегрировал keycloak с приложением, я написал AuthGuard для защиты определенных маршрутов .canActivate работает нормально, но компонент для маршрута также загружается и другие вызовы API также запускаются в фоновом режиме.Как загрузить компонент, пока canActivate не вернет результат.

AuthGuard:
-----------
 canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
    if (!this.keycloakService.getIsClientSecretKeyFetch()) {
      this.errorHandler._enlivenErrorhandler.handleError({"status":"401","message" :"Unable to get client details. Please contact your administrator ","url":window.location.href});
      this.router.navigate(['404'], { queryParams: { tenantId: this.cookieService.get('tenantId') } });
    }
    this.isAccessAllowed(route,state);
    return super.canActivate(route, state);
  }

  isAccessAllowed(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
    return new Promise((resolve, reject) => {
      if (!this.authenticated) {
        this.keycloakAngular.login();
        return;
      }
      const path = route.data.path;
      this.keycloakService.isAuthorized(path).then(
        (res) => {
          let access = res;
          if (access) {
            resolve(true);
          } else {
            resolve(false);
          }
        });
      resolve(true);
    });
  }

routes.ts
-----------
RouterModule.forChild([

            {
                path: 'data-source-mongo-list',
                canActivate: [AppAuthGuard],
                data: {
                    path:'data-source-mongo-list'
                },
                component: DataSourceListComponent
            }])

1 Ответ

0 голосов
/ 26 февраля 2019

Из того, что я вижу, похоже, что вы реализовали все эти OpenId самостоятельно.Из моего личного опыта я не могу рекомендовать это.Вы пытались использовать angular-oauth2-oidc?Я думаю, что это хорошо описано здесь: https://www.softwarearchitekt.at/post/2016/07/03/authentication-in-angular-2-with-oauth2-oidc-and-guards-for-the-newest-new-router-english-version.aspx

...