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

时间:2020-09-23 14:39:53

标签: angular msal msal.js auth-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, 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可能已执行,用户详细信息为空,并且未经授权就打开了页面。

0 个答案:

没有答案