AuthGuard可以使用http请求激活角色

时间:2018-06-15 19:59:35

标签: javascript angular rxjs

我有一个奇怪的情况。我的AuthGuard比平常更复杂。 它取决于用户角色的身份验证令牌。

因此,无论何时触发canActivate,我都必须检查用户是否经过身份验证,然后检查他是否有权转到所需的路由。

权限检查在后端处理,因此我只需要提出请求并获得响应,无论用户是否被允许。

我不知道如何实现这一目标。检查身份验证令牌很简单,但如何将其与http请求结合起来?我不知道。我尝试了很多解决方案,但总是遇到错误或无限等待。

这是我的canActivate方法的代码。请注意,checkPermissionhttp.get(...)

canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {

    return this.store.select('auth').pipe(
      take(1),
      map((state: State) => {
        if (state.token) {
          return this.checkPermission(state, route).pipe(
            map(res => {
              if (res) {
                return true;
              }
              return false;
            })
          );
        } else {
          return false;
        }
      }));
  }

1 个答案:

答案 0 :(得分:0)

使用switchMap

canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {

    return this.store.select('auth').pipe(
      take(1),
      switchMap((state: State) => {
        if (state.token) {
          return this.checkPermission(state, route);
        } else {
          return of(false);
        }
      }),
      map(res => !!res)
    );
  }