首页 > 解决方案 > Ngrx 两个守卫在注销时第二个不触发路由

问题描述

我有这些路线:

{
    path: 'admin',
    canLoad: [AuthGuard, AccountGuard],
    loadChildren: () =>
      import('./features/admin/admin.module').then(m => m.AdminModule),
    data: { preload: false }
  },
  {
    path: 'auth',
    loadChildren: () =>
      import('./features/auth/auth.module').then(m => m.AuthModule),
    data: { preload: false }
  }

在登录时,两者都被触发,但是当在管理区域中我注销删除身份验证和帐户状态时,如果我再次登录而不刷新仅触发第一个,则重定向到身份验证路由。我试过使用

onSameUrlNavigation: 'reload'

runGuardsAndResolvers: 'always'

但我仍然有同样的行为。

有任何想法吗?

注意 ,我也尝试在 AccountGuard 中放置一个简单的 console.log,例如

canLoad(): Observable<boolean> {console.log('Account)}

但在第二次登录时,我在开发工具中看不到任何消息

标签: angularngrxangular-guards

解决方案


根据角度网站的定义 - “CanLoad是一个类可以实现的接口,作为决定是否可以加载子级的守卫”。

当 route/child 被加载时,CanLoad守卫返回 true,然后,一旦加载,守卫将不再被调用。每次导航到路线时,CanActivate都需要进行此类检查。我建议实施CanActivate并分配需要在登录时运行的警卫。

另外这里是 github 的链接,该功能已由 Angular 团队实现 - https://github.com/angular/angular/commit/8785b2bf6db8c3ecc4bd5edcf667d5f2f53f5271


推荐阅读