首页 > 解决方案 > 将可观察对象放入角度条件

问题描述

我正在尝试基于我的 api 创建一个日志系统,我创建了 3 个函数: me():返回带有令牌的用户配置文件 isloggedin() 返回一个布尔可观察对象,基于:有 me() 请求 data.success (已被api接受的令牌)最后,我在我的角度保护中使用它;

我有:

    console.log("triggered");
    if(localStorage.getItem('token') && localStorage.getItem('logged') == "True"){
      let meOptions = {
        headers: new HttpHeaders({
          'Content-Type':  'application/json',
          'Authorization': localStorage.getItem('token'),
        })
      };
    return this.http.get<user>('https://localhost:3000/user/me', meOptions);
  }else{
    return of(new user(false, "",""));
  }

  }
isloggedin():Observable<boolean>{
  return this.me().pipe(map(data=>{ //pipe sur undefined 
    console.log(data);
    if(data.success){
      console.log("renvoie oui")
      return true; 
    }else{
      console.log("renvoie non")
      return false;
    }
  }))
}

我验证了:

   this.auth.isloggedin().subscribe((data)=>{
      console.log(data);
    })

    if(this.auth.isloggedin()){
      console.log("You logged - guard")
      return true;

    }else{
      console.log("Kick by guard ! Not logged - guard")
      this.router.navigate(["auth"]);
      return false;
    }
  }```
Everytime, the guard returns "logged", even when the isloggedin() tells that the user isn't loggedin,
what am I doing wrong ? How to correct it ?
Thanks

标签: angulartypescriptrxjsobservableguard

解决方案


你将你的 observable 返回给守卫,让他们处理订阅......

return this.auth.isLoggedIn().pipe(
  tap(loggedIn => {
    if (!loggedIn) {
      this.router.navigate(['auth']);
    }
  })
)

推荐阅读