我有一个要求,根据我需要激活到路线的角色。请在下面找到代码:
canActivate(): boolean {
if(this.login_token) {
this._Service.getUser(this.login_token).subscribe(
(data) => {
if(data.role === 'admin') {
return true;
}
});
} else {
return false;
}
}
我已经配置了我的路线,如下所示:
{path: 'user', children: childRoutes, canActivate: [AuthGuard]}
但即使我的警卫恢复真实,我也无法前往user
路线。
如果我在这里做错了,请告诉我。我已经在SO上探索了很多帖子来处理警卫中的异步调用,但仍然没有suucess
答案 0 :(得分:2)
您是否在每次路线更改时都进行了http呼叫?
如果您的前端有令牌,那么
会更好如果您在每次路线更改时都进行http呼叫,这不仅会降低您的应用程序速度,而且移动数据用户将不得不为这些呼叫付费而且他们不会喜欢这样。
你应该做的是:
canActivate(): boolean {
return this.login_token ? true : false;
}
如果您的后端正在处理错误的令牌,或
canActivate(): boolean {
try {
return this.isTokenValid();
} catch(error) {
return false;
}
}
isTokenValid(): boolean {
// Test if token exists
// Decode token
// Check if token is not expired
// return a boolean stating if it succeed
}
如果你的后端没有处理令牌(但它应该这样......)