【发布时间】:2018-06-16 18:49:28
【问题描述】:
我有基于本地存储值(如果存在或不存在)的身份验证保护。但是在从本地存储中获取值之前,canActivate() 函数会返回空值。我能做些什么来实现这个机制?
我的代码
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
this.check = this.usr.getUserLoggedIn().subscribe((data) => {
// this.check = data;
console.log(data);
});
// console.log('check', this.check);
if (this.check === true) {
return true;
} else {
// alert('else');
this.router.navigate(['/authentication/login']);
return false;
}
}
服务功能代码:
getUserLoggedIn() {
return this.localStorage.getItem('isUserLoggedIn');
// return this.isUserLoggedIn;
}
【问题讨论】:
-
在 setTimeout 方法中添加您的逻辑,以便有时间获取本地存储值。延迟值不需要设置,也可以为0。
-
因为你的 canActivate 方法实际上并没有返回一个可观察的布尔值
-
@jonrsharpe 我如何将这个设置为 true 的本地存储值传递给 canActivate 函数,因为我必须将此值传递给 canActivate 以进一步路由是否有任何方法可以实现这种机制?
-
你不在方法中订阅,你返回一个 observable 并让框架订阅。将签名更改为仅包含
Observable<boolean>作为有效返回,然后查看您收到的警告。