可观察到的成角度状态

问题描述 投票:0回答:1

我正在尝试基于我的api创建一个日志系统,我创建了3个函数:me():返回带有令牌的用户个人资料isloggedin()返回一个可观察的布尔值,基于:具有me()请求数据。成功(已被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

angular typescript rxjs observable guard
1个回答
0
投票

您将可观察者退还给警卫,让他们处理订阅...

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

0
投票

这没什么大不了,用if语句访问的是可观察值,而不是值。只需将其替换为:

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

}

[对不起,我使用的答案是一个主题,不是可观察的。在这种情况下,您必须真正订阅。

© www.soinside.com 2019 - 2024. All rights reserved.