Angular MsalGuard进行身份验证,并编写了自己的Guard进行授权,需要先等待身份验证

问题描述

我有一个应用程序,其中有两个防护(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,]
         },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可能已执行,用户详细信息为空,并且未经授权就打开了页面

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...