Угловая маршрутизация с авторизацией на сервере идентификации - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь настроить Angular и Identity Server. Это приложение действительно имеет два маршрута. project-list и project-details.

Обе эти страницы должны быть защищены. Прямо сейчас это работает несколько. Когда я доберусь до http://localhost:4200, он покажет страницу со списком проектов с заголовком, но без данных проекта. Примерно через секунду или две он перенаправляет на страницу входа на сервер удостоверений.

Я не хочу, чтобы он отображал страницу списка проектов с заголовком, я хочу, чтобы она сразу переходила на страницу входа.

const routes: Routes = [
  {
    path: "project-list",
    component: ProjectlistComponent,
    canActivate: [AuthorizationGuard]
  },
  {
    path: "project-details/:id",
    component: ProjectDetailsComponent,
    canActivate: [AuthorizationGuard]
  },
  { 
    path: "", 
    redirectTo: "project-list", 
    pathMatch: "full" 
  }

В AuthorizationGuard, если пользователь не аутентифицирован, перенаправить на автологин

  private checkUser(): any {
    console.log('AuthorizationGuard, canActivate');

    return this.oidcSecurityService.getIsAuthorized().pipe(
      tap((isAuthorized: boolean) => {
        console.log('AuthorizationGuard, canActivate isAuthorized: ' + isAuthorized);        

        if (!isAuthorized) {
          this.router.navigate(['/autologin']);
        }
      })
    );
  }

Есть ли лучший способ без перенаправления на автологин?

import { Component, OnInit, OnDestroy } from "@angular/core";
import { OidcSecurityService } from "angular-auth-oidc-client";

@Component({
  selector: "app-auto-component",
  templateUrl: "./auto-login.component.html"
})
export class AutoLoginComponent implements OnInit, OnDestroy {
  lang: any;

  constructor(public oidcSecurityService: OidcSecurityService) {
    this.oidcSecurityService.onModuleSetup.subscribe(() => {
      this.onModuleSetup();
    });
  }

  ngOnInit() {
    if (this.oidcSecurityService.moduleSetup) {
      this.onModuleSetup();
    }
  }

  ngOnDestroy(): void {}

  private onModuleSetup() {
    this.oidcSecurityService.authorize();
  }
}

1 Ответ

2 голосов
/ 11 октября 2019

Я полагаю, что вы authgaurd возвращаете checkUser(), если нет необходимости. Затем вам нужно вернуть Boolean в вашей трубе, поэтому измените checkUser() на

private checkUser(): Observable<bool>{
     return this.oidcSecurityService.getIsAuthorized().pipe(
      map((isAuthorized: boolean) => {
        if (!isAuthorized) {
          this.router.navigate(['/autologin']);
        }
        return isAuthorized;
      })
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...