我正在尝试基于我的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
您将可观察者退还给警卫,让他们处理订阅...
return this.auth.isLoggedIn().pipe(
tap(loggedIn => {
if (!loggedIn) {
this.router.navigate(['auth']);
}
})
)
这没什么大不了,用if语句访问的是可观察值,而不是值。只需将其替换为:
if(this.auth.isloggedin().value){
console.log("You logged - guard")
return true;
}
[对不起,我使用的答案是一个主题,不是可观察的。在这种情况下,您必须真正订阅。