【发布时间】:2021-03-12 16:16:49
【问题描述】:
我们有一个Router Guard,它检查用户是否登录和管理员 它还应该检查我们发送到服务器的请求是否具有正确的结果。
问题是canActivate函数在服务器请求完成之前就完成了,所以Router Guard总是false。
希望你有办法解决这个问题
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
var user = JSON.parse(localStorage.getItem('currentUser'));
if (user != null&&!user.isNotAdmin) {
if(this.userService.isLoggedIn(user)){
return true;
}else{
return false;
}
}else{
// not logged in so redirect to login page with the return url
this.router.navigate([''], { queryParams: { returnUrl: state.url } });
return false;
}
【问题讨论】:
-
使用带有
await的承诺? -
如果可能,尽量避免在
canActivate中调用服务器。因为为每个导航进行服务器调用会使您的页面重定向速度变慢。 -
我试过但不知道。我怎么能用等待来做到这一点?
-
我遇到了同样的问题,这个帖子可能会有所帮助。 stackoverflow.com/a/51363905/536388
-
你在本地存储中有一个对象,它只有一个用户是否是管理员的密钥——这绝对没有安全性。
标签: angular