Angular 7 CanActivate Guards失败了

时间:2018-11-27 16:28:58

标签: angular angular7 canactivate

我的所有路线上都有CanActivate守卫,他们正在故障转移。

例如,我有两个警卫:

export class AuthenticationGuard implements CanActivate {
    constructor(private as: AuthenticationService, private router: Router) { }

    canActivate() {
        if (this.as.isLoggedIn()) {
            return true;
        }

        this.router.navigate(['/login']);

        return false;
     }
    }

export class IsAdminGuard implements CanActivate {
    constructor(private us: UserService, private router: Router) { }

    canActivate() {
        if (this.us.isAdmin()) {
            return true;
        }

        this.router.navigate(['/home']);

        return false;
    }
}

还有我的路线守卫

const routes: Routes = [
    {
        path: 'home',
        component: DashboardComponent,
        canActivate: [AuthenticationGuard, IsAdminGuard]
    }
];

@NgModule({
    imports: [ RouterModule.forRoot(routes) ],
    exports: [ RouterModule ]
});

正在发生的事情是,如果AuthenticationGuard失败,它将有时检查IsAdminGuard,而不是在未通过身份验证时将某人路由到/login发送到/home,由于它们未通过身份验证且不是管理员,因此将它们发送到其他错误页面,并且警卫在第一次失败时应将其踢出。

如果我删除AuthenticationService在调用isLoggedIn()时检查的身份验证jwt,刷新/home路由并可以跟踪{{1 }}返回AuthenticationGuard,然后 still 调用false

这是IsAdminGuard

的代码
isLoggedIn()

有想法吗?

1 个答案:

答案 0 :(得分:1)

考虑到isAdmin防护短路,该防护会重新检查身份验证状态。这样,身份验证真实性将永远不会被isAdmin真实性的结果所覆盖。它可能看起来很多余,但是可以使用。