代码之家  ›  专栏  ›  技术社区  ›  user9487981

可以激活防护装置并使用角度为5的可见光

  •  4
  • user9487981  · 技术社区  · 7 年前

    我正在使用一个实现canActivate的路线守卫

    我在代码中放置了一组控制台日志,以了解它在哪里失败。

    如果我导航到受保护的路由,会发生什么。导航失败,因为防护无法返回值。我拥有的http映射尚未完成。

    我当前有一个JWT令牌保存在会话存储中,但没有保存在本地

    这些是我运行警卫时得到的控制台日志

    running the local check

    running the session check

    got session token authorizing it

    然后http映射返回,然后代码中断。

    完整代码如下所示。将不胜感激!

    import {Observable} from 'rxjs/Observable';
    import 'rxjs/add/operator/map';
    import {
      CanActivate,
      ActivatedRouteSnapshot,
      RouterStateSnapshot,
      Router
    } from '@angular/router';
    import {Injectable} from '@angular/core';
    import {UserAuthorizationService} from "../userauthorizationservice/userauthorizationservice";
    
    
    @Injectable()
    export class ClientSuitsAdminSuperUserGuard implements CanActivate{
      constructor(private userservice: UserAuthorizationService, private router: Router){}
      user ={
        id: null,
        isclient: false,
        issuitsviewer: false,
        issuitsadministrator: false,
        issuitssuperuser: false,
        isvenueuser: false
    
      };
    
      canActivate(route: ActivatedRouteSnapshot,
                  state: RouterStateSnapshot): Observable<boolean> | boolean {
    
        let token = this.userservice.checklocalfortoken();
        console.log('running the local check');
        if(token == null){
          console.log('running the session check');
          token = this.userservice.checksessionfortoken();
          if(token == null){
            console.log('no session token nav to sign in return false');
            this.router.navigate(['/signin']);
            return false;
          }
          console.log('got session token authorizing it');
          this.userservice.returnauthorizetoken(token)
            .map(
              (req: any)=>{
                this.user = req;
                console.log('this is the user object from the session auth');
                console.log(this.user);
                if(this.user.isclient || this.user.issuitsadministrator || this.user.issuitssuperuser){
                  console.log('the user has permissions from the session');
                  return true;
                }else{
                  console.log('the user does  not have permissions from the session');
                  this.router.navigate(['/401']);
                  return false;
                }
              },
              error => {
                console.log('error with the session authorization');
                this.router.navigate(['/signin']);
                return false;
              }
            );
    
        }else{
          console.log('doing the local check');
          this.userservice.returnauthorizetoken(token)
            .map(
              (req: any)=>{
                this.user = req;
                console.log('got the user object from the local');
                console.log(this.user);
                if(this.user.isclient || this.user.issuitsadministrator || this.user.issuitssuperuser){
                  console.log('user has permissions from the local');
                  return true;
                }else{
                  console.log('user does not have permissions from the local');
                  this.router.navigate(['/401']);
                  return false;
                }
              },
              error => {
                console.log('error from the local authorization');
                this.router.navigate(['/signin']);
                return false;
              }
            );
        }
      }
    
    }
    
    2 回复  |  直到 7 年前
        1
  •  7
  •   Community CDub    5 年前

    您需要从 canActivate 发出布尔值的。在引擎盖下,角度订阅返回的可观察对象,然后根据发射值正确处理路由。

    如果将调用返回给 userservice

    已更新

    @Injectable()
    export class ClientSuitsAdminSuperUserGuard implements CanActivate{
      constructor(private userservice: UserAuthorizationService, private router: Router){}
      user ={
        id: null,
        isclient: false,
        issuitsviewer: false,
        issuitsadministrator: false,
        issuitssuperuser: false,
        isvenueuser: false
    
      };
    
      canActivate(route: ActivatedRouteSnapshot,
                  state: RouterStateSnapshot): Observable<boolean> | boolean {
    
        let token = this.userservice.checklocalfortoken();
        if (token == null) {
          token = this.userservice.checksessionfortoken();
          if(token == null){
            this.router.navigate(['/signin']);
            return false;
          }
          return this.userservice.returnauthorizetoken(token)
            .map(
              (req: any)=>{
                this.user = req;
                console.log('this is the user object from the session auth');
                console.log(this.user);
                if(this.user.isclient || this.user.issuitsadministrator || this.user.issuitssuperuser){
                  console.log('the user has permissions from the session');
                  return true;
                }else{
                  console.log('the user does  not have permissions from the session');
                  this.router.navigate(['/401']);
                  return false;
                }
              },
              error => {
                console.log('error with the session authorization');
                this.router.navigate(['/signin']);
                return false;
              }
            );
    
        } else {
          console.log('doing the local check');
          return this.userservice.returnauthorizetoken(token)
            .map(
              (req: any)=>{
                this.user = req;
                console.log('got the user object from the local');
                console.log(this.user);
                if(this.user.isclient || this.user.issuitsadministrator || this.user.issuitssuperuser){
                  console.log('user has permissions from the local');
                  return true;
                }else{
                  console.log('user does not have permissions from the local');
                  this.router.navigate(['/401']);
                  return false;
                }
              },
              error => {
                console.log('error from the local authorization');
                this.router.navigate(['/signin']);
                return false;
              }
            );
        }
      }
    
    }
    
        2
  •  0
  •   Prachi    7 年前

    使用方法如下:

            canActivate(route: ActivatedRouteSnapshot,
                      state: RouterStateSnapshot): Observable<boolean> | boolean {
            let token = this.userservice.checklocalfortoken();
            console.log('running the local check');
            if(token == null){
              console.log('running the session check');
              token = this.userservice.checksessionfortoken();
              if(token == null){
                console.log('no session token nav to sign in return false');
                this.router.navigate(['/signin']);
                return false;
              }
              console.log('got session token authorizing it');
              //subscribe method_first and return boolean  variable from here
            }else{
           //subscribe method_second and return boolean  variable from here
            }
          }
    
    
    
           method_first(token): observable<any>{
           this.userservice.returnauthorizetoken(token)
                .map(
                  (req: any)=>{
                    this.user = req;
                    console.log('this is the user object from the session auth');
                    console.log(this.user);
                    if(this.user.isclient || this.user.issuitsadministrator || this.user.issuitssuperuser){
                      console.log('the user has permissions from the session');
                      return true;
                    }else{
                      console.log('the user does  not have permissions from the session');
                      this.router.navigate(['/401']);
                      return false;
                    }
                  },
                  error => {
                    console.log('error with the session authorization');
                    this.router.navigate(['/signin']);
                    return false;
                  }
                );
          }
    
          method_second(token): observable<any>{
          console.log('doing the local check');
              this.userservice.returnauthorizetoken(token)
                .map(
                  (req: any)=>{
                    this.user = req;
                    console.log('got the user object from the local');
                    console.log(this.user);
                    if(this.user.isclient || this.user.issuitsadministrator || 
        this.user.issuitssuperuser){
                      console.log('user has permissions from the local');
                      return true;
                    }else{
                      console.log('user does not have permissions from the local');
                      this.router.navigate(['/401']);
                      return false;
                    }
                  },
                  error => {
                    console.log('error from the local authorization');
                    this.router.navigate(['/signin']);
                    return false;
                  }
                );
        }
    
    推荐文章