Я пытаюсь настроить 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();
}
}