【问题标题】:angular 4 router auth-guard not invoked on same route角度 4 路由器 auth-guard 未在同一路由上调用
【发布时间】:2018-06-24 22:14:40
【问题描述】:

您好,我配置了这个路由:

const routes: Routes = [
  {
    path: '',
    component: LayoutComponent,
    canActivateChild: [AuthGuardService],
    children: [
      {
          path: '', 
          pathMatch: 'full', 
          redirectTo: '/buchbestellungen', 
          canActivate: [AuthGuardService]
       },
       {
          path: 'buchbestellungen', 
          component: BuchbestellungenComponent, 
          canActivate: [AuthGuardService] 
       },
       {
          path: 'buchbestellungen2', 
          component: Buchbestellungen2Component, 
         canActivate: [AuthGuardService] 
       },
    ]
  },
  {path: 'login', component: LoginComponent},
  {path: '**', component: NotFoundComponent}
];

我不想关心登录页面的名称,如果那是将来注销后的目标页面。因此,注销完成后,注销组件将重定向到起始页。

目前,如果您通过了身份验证,则没有起始页组件(稍后可能会有仪表板),而是重定向到“buchbestellungen”路由。如果您没有登录,访问起始页会重定向到 /buchbestellungen,而 auth-guard 服务会重定向到登录路径。

这适用于每条路线(例如 buchbestellungen2),但不是,当我在 /buchbestellungen 上注销时。这将重定向到“/”,然后返回到 buchbestellungen。但是 auth-guard 没有被调用(我在 canActivate() 方法中有一个 Console.log(),但它也没有被调用)。

示例 1: buchbestellungen2 -> logout() -> 重定向到 / -> 重定向到 /buchbestellungen 被 auth-guard 拦截我在 /login 路由上结束

示例 2: buchbestellungen -> logout() -> 重定向到 / -> 重定向到 /buchbestellungen(没有 auth-guard 并且没有重定向到 /login)

路由器是否有可能不调用 auth-guard,因为我来自 /buchbestellungen 并且此路由已经过身份验证?是否有可能强制路由器调用警卫?

谢谢

【问题讨论】:

    标签: angular redirect routing canactivate auth-guard


    【解决方案1】:

    默认情况下,如果路由没有改变(并且重定向不算作路由改变),Angular 会重用组件。除了实现自定义 RouteReuseStrategy (在这里看起来有点过分)之外,我唯一的想法是创建某种 LogoutComponent 附加到 /logout 路径。该组件将在 ngOnInit 期间将用户重定向回 root,或者它可以由 AuthGuard 保护,它将执行重定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      相关资源
      最近更新 更多