无法在角度使用CanActivate Guard

时间:2019-01-26 08:36:08

标签: angular typescript

我正在实现一个CanActivate警卫队,它检查用户是否登录。我已经为此创建了一个服务,并且正在使用私有变量“ userLoggedIn”,其值可以为true或false。

首先从AWS提取数据,以查看用户是否登录,然后设置变量的值。

constructor() {
Auth.currentAuthenticatedUser({
     bypassCache: false 
    }).then(user => {
    console.log(user);
    if(user.currentAuthenticatedUser === '_admin'){
        this.set_user(true);
         }
     }).catch(err => {this.set_user(false);
 });
}


set_user(thing){
    console.log(this.userLoggedIn);
 }

如果用户存在,那么我想对其进行一些计算,然后将变量设置为“ True”或“ False”。

我有一个下面的函数,该函数在被调用时将值返回给auth Guard。

getUserLoggedIn(){
    return this.userLoggedIn;
 }

出现的问题是,当auth Guard调用getUserLoggedIn时,构造函数中的计算尚未完成,并且返回的值是'undefined'。

我创建了以下三个函数:-

checking(){
    return new Promise((resolve, reject) => {
        Auth.currentAuthenticatedUser({
            bypassCache: false  
        }).then(user => {
            console.log(user);
            if(user.currentAuthenticatedUser === '_admin'){
            this.set_user(true);
            }
        })
        .catch(err => {this.set_user(false);
    });
        resolve();
    });
}

然后另一个:-

getUserLoggedIn(){
    return this.userLoggedIn;
 }

为了顺序执行这些功能,我调用了另一个功能:-

 toGetRes(){
     this.checking().then(res => this.getUserLoggedIn())
 }

我在我的身份验证保护服务中呼叫了toGetres(),但仍然无法按顺序工作。我缺少什么,还是应该尝试其他方法?

这是我的authGuard

export class AuthGuard implements CanActivate {
  constructor(private user: DataService, private router: Router)  {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
      if (this.user.getUserLoggedIn()){
        return true;
      }
      else{
        console.log(this.user.getUserLoggedIn());
        this.router.navigate(['/login']);
      }
  }

}

如果未通过身份验证,我想将人们重定向到'/login',但是即使我已登录,它也会重定向我。

0 个答案:

没有答案