加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 返回布尔值而不是订阅canActivate

发布时间:2020-12-17 17:51:38 所属栏目:安全 来源:网络整理
导读:我有一个受canActivate防护保护的组件. checkLogin函数中的Authguard从一个observable订阅,但我不知道如何从它返回一个布尔值到canActivate. guard.service.ts canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean { let url:
我有一个受canActivate防护保护的组件. checkLogin函数中的Authguard从一个observable订阅,但我不知道如何从它返回一个布尔值到canActivate.

guard.service.ts

canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean {
    let url: string = state.url;

    return this.checkLogin(url);
  }

    public checkService:boolean;
  checkLogin(url: string):boolean {

         return this.loadAppSettings().subscribe(res=>{
              console.log(this.checkservice);
              if (this.checkservice == true) 
              {
                   return true; 
            }
            else{
                this.router.navigate(['/error-user']);
                return false;
            }
            });
      }//checkLogin throws error as type subscription is not assignable to type boolean

所以我想要的是如果this.checkService为true,它应该返回true并且用户应该能够登陆被保护的路由但是如果它是假的,他应该被导航到错误用户.

Angular2 – return boolean with subscribe to canActivate这个问题与我的相似,但无法解决我的问题.

有人可以在这帮忙.

解决方法

canActivate也可以返回一个observable,请参阅定义 CanActivate-interface.只需相应地更改返回类型即可.

canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> {
    let url: string = state.url;

    return this.checkLogin(url);
}

public checkService:boolean;
checkLogin(url: string):Observable<boolean> {
     return this.loadAppSettings().map(res=>{
          console.log(this.checkservice);
          if (this.checkservice == true) 
          {
               return true; 
        }
        else{
            this.router.navigate(['/error-user']);
            return false;
        }
    });
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读