可以通过服务电话激活警卫

时间:2018-01-24 09:46:43

标签: angular angular-router-guards

我有一个要求,根据我需要激活到路线的角色。请在下面找到代码:

  canActivate(): boolean {
    if(this.login_token) {
       this._Service.getUser(this.login_token).subscribe(
          (data) => {
             if(data.role === 'admin') {
               return true;
             }
          });
    } else {
           return false;
    }   
  }

我已经配置了我的路线,如下所示:

{path: 'user', children: childRoutes, canActivate: [AuthGuard]}

但即使我的警卫恢复真实,我也无法前往user路线。 如果我在这里做错了,请告诉我。我已经在SO上探索了很多帖子来处理警卫中的异步调用,但仍然没有suucess

1 个答案:

答案 0 :(得分:2)

您是否在每次路线更改时都进行了http呼叫?

唐'吨

如果您的前端有令牌,那么

会更好
  • 测试令牌是否有效
  • 发出请求,让后端解码令牌。

如果您在每次路线更改时都进行http呼叫,这不仅会降低您的应用程序速度,而且移动数据用户将不得不为这些呼叫付费而且他们不会喜欢这样。

你应该做的是:

canActivate(): boolean {
  return this.login_token ? true : false;
}

如果您的后端正在处理错误的令牌,或

canActivate(): boolean {
  try {
    return this.isTokenValid();
  } catch(error) {
    return false;
  }
}

isTokenValid(): boolean {
  // Test if token exists
  // Decode token
  // Check if token is not expired
  // return a boolean stating if it succeed
}

如果你的后端没有处理令牌(但它应该这样......)