相关疑难解决方法(0)

多个canActivate防护装置在第一次失败时全部运行

我有一个有两名canActivate守卫的路线(AuthGuard和RoleGuard).first(AuthGuard)检查用户是否已登录,如果没有,则重定向到登录页面.第二个检查用户是否具有允许查看页面的角色定义,如果没有,则重定向到未授权页面.

canActivate: [ AuthGuard, RoleGuard ]
...
export class AuthGuard implements CanActivate {
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
        ...
        this.router.navigate(['/login']);
        resolve(false);
}

export class RoleGuard implements CanActivate {
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
        ...
        this.router.navigate(['/unauthorized']);
        resolve(false);
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我访问路线并且我没有登录时,我点击了AuthGuard,它失败并告诉路由器导航到/login.然而,即使AuthGuard失败RoleGuard了,然后运行然后导航到/unauthorized.

在我看来,如果第一个失败,那么运行下一个后卫是毫无意义的.有没有办法强制执行此行为?

routing typescript angular2-routing angular

29
推荐指数
5
解决办法
2万
查看次数

Angular 2 Router Guards命令

可以在阵列中定义Angular 2路由器防护装置.例如:

<code>
 canActivate: ['CanAlwaysActivateGuard','AuthGuard']
</code>
Run Code Online (Sandbox Code Playgroud)

以下是我的问题:

  1. 两个警卫的执行顺序是什么.
  2. 如果我想仅在CanAlwaysActivateGuard返回true时才执行AuthGuard,那么这是可能的.

angular2-routing angular

8
推荐指数
3
解决办法
3440
查看次数

按顺序执行多个异步路径保护

我知道当canActivate函数返回一个简单的时boolean,角度路径保护以指定的顺序执行,但是,如果守卫返回类型Observable<boolean>或Promise<boolean>?

路线示例:

{
    path: 'confirm',
    canActivate: [AuthGuard, SessionExpiredAuthGuard, CheckoutAuthGuard],
    component: CheckoutReviewOrderComponent
},
Run Code Online (Sandbox Code Playgroud)

SessionExpiredAuthGuard和CheckoutAuthGuard都返回类型Observable<boolean>.我不希望在SessionExpiredAuthGuard完成从异步http请求中检索数据之前执行CheckoutAuthGuard.

有没有办法强制这些异步防护按顺序执行?

angular angular-router-guards angular-observable

3
推荐指数
1
解决办法
2409
查看次数