angular - 将可观察对象放入角度条件
问题描述
我正在尝试基于我的 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);
})
- 返回 true 或 false 但是,当它进入 observable 时:
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
解决方案
你将你的 observable 返回给守卫,让他们处理订阅......
return this.auth.isLoggedIn().pipe(
tap(loggedIn => {
if (!loggedIn) {
this.router.navigate(['auth']);
}
})
)
推荐阅读
- git - git lfs ls-files 的特定提交
- bash - Shell 脚本:如何从大型语料库中复制具有特定字符串的文件
- awk - gawk 中的意外括号错误
- python - 如何在单个声明中创建多个空类?
- python - 具有用户定义字段和外键选择的 ModelForm
- node.js - Nodejs-将数据导出到excel时在单元格中进行TextWrap
- javascript - 从一个数组中删除代表另一个数组的重复数据
- c# - asp:literal 控件上如何避免xss?
- javascript - React JS 中 webpack.config.js 中的这个相对路径有什么问题?
- c# - 在 Word 中模拟从另一个 VSTO 插件单击功能区按钮