在Angular AuthGuard中使用@ ngrx / store元素

时间:2019-04-03 11:56:19

标签: angular rxjs ngrx ngrx-store auth-guard

我正在尝试使用authguardService中来自ngrx / store的元素。 当路由到达可以检查canActivate的地步时,它可以正常工作,但是当元素更改时,路由保护器不会更改其输出,并且canActivate函数仍然返回,即使它应该返回false。

canActivate函数的代码:

canActivate(): Observable<boolean> | Promise<boolean> | boolean {
    return this.store.pipe(
      select('account'),
      map((account) => {
        console.log('account', account);
        if (account.agb === true) {
          return true;
        } else {
          this.router.navigate(['/agb']);
          return false;
        }
      }),
      take(1)
    );
  }

路由:

{
        path: '',
        canActivate: [BesucherGuardService],
        children: [
          { 
            path: 'offers',
            component: BesucherTestComponent
          }
        ]
      },
      {
        path: '',
        canActivate: [AuthGuardService, AgbGuardService, LernenderGuardService],
        children: [
          {
            path: 'offers',
            component: LernenderTestComponent
          }
        ]
      },

如您在上面的代码中看到的,我定义了两次/ offer路线,一次是当您成为Besucher时,一次是当您成为Lernender时。 不幸的是,即使在商店中account.role更改为LERNENDER之后,它仍然与路由匹配,因为BesucherGuardService似乎不知道account.role变量的更改。

我该如何解决?

0 个答案:

没有答案