我有一个应用程序,其中有两个防护(MsalGuard-用于身份验证,AuthGuard-编写自己的代码以授权用户是否可以访问该特定页面)。在加载模块时使用延迟加载。请找到以下代码
app-routing.module.ts
{
path: 'administration',
loadChildren: () => import('./administration/administration.module').then(m =>
m.AdministrationModule),
// loadChildren: './administration/administration.module#AdministrationModule',
canActivate: [MsalGuard],
},
administration-routing.module.ts
path: '',
//canActivate: [AuthGuard],
component: AdministrationComponent,
children: [
{
path: 'user-admin/user-list',
children: [
{ path: '', component: UserListComponent, canActivate: [AuthGuard] },
{ path: 'user-creation', component: UserCreationComponent, canActivate: [AuthGuard] },
]
},
auth.guard.ts
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const currentUser = this.authenticationService.currentUserValue;
if (currentUser) {
return this.hasAdminAccess(state, currentUser);
}
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });
return false;
}
这是主要问题,如果我们登录一次并能够进行相应的授权,它就会按预期工作。.但是,如果我清除了总缓存并直接打开其中一个组件页面,则它会询问MsalAuth并提供详细信息,到那时,AuthGuard可能已执行,用户详细信息为空,并且未经授权就打开了页面。