Angular 7 + SSO - куда перенаправить на сервер авторизации - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужно проверить загрузку приложения, если пользователь вошел в систему и если не перенаправить на сервер авторизации.Какое место лучше всего сделать в угловом проекте?Я хотел бы сделать это, прежде чем какие-либо компоненты будут видны пользователю.

1 Ответ

1 голос
/ 28 апреля 2019

Как вы знаете, угловое приложение - это SPA, а навигация по страницам - только о мягких маршрутах.Чтобы предотвратить несанкционированный доступ к любой странице вашего приложения, вы должны предоставить защиту маршрута (реализация CanActivate) для всех ваших определений маршрута.Я делюсь примером кода ниже.AccessValidator реализует интерфейс CanActivate и определяет необходимую логику для перенаправления попыток несанкционированного доступа на экран входа в систему.

export class AccessValidatorService implements CanActivate {

  constructor(public router: Router) {}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
    let result = true;
    if (this.shouldNavigateToLogin()) { // this check is up to you
      this.router.navigateByUrl('/' + LoginScreenComponent.ROUTE_PATH);
      result = false;
    }
    return of(result);
  }
  // ...
 }



@NgModule({
  imports: [
    RouterModule.forRoot([
      {
        path: 'example_screen',
        component: ExampleScreenComponent,
        canActivate: [AccessValidatorService]
      }
    ])
  ],
  providers: [AccessValidatorService]
})

Для дальнейших и подробных объяснений: https://angular.io/api/router/CanActivate

Если вы хотите проверитьсрок действия сеанса также перед каждым http-запросом (вызовы служб и т. д.); способ, которым вы должны это делать, - реализация HttpInterceptorВы можете выполнить это пошаговое руководство, объясняющее, как реализовать HttpInterceptor.

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