因此,无论何时触发canActivate,我都必须检查用户是否经过身份验证,然后检查他是否有权转到所需的路由。
权限检查在后端处理,因此我只需要提出请求并获得响应,无论用户是否被允许。
我不知道如何实现这一目标。检查身份验证令牌很简单,但如何将其与http请求结合起来?我不知道。我尝试了很多解决方案,但总是遇到错误或无限等待。
这是我的canActivate方法的代码。请注意,checkPermission
为http.get(...)
canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {
return this.store.select('auth').pipe(
take(1),
map((state: State) => {
if (state.token) {
return this.checkPermission(state, route).pipe(
map(res => {
if (res) {
return true;
}
return false;
})
);
} else {
return false;
}
}));
}
答案 0 :(得分:0)
使用switchMap
canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {
return this.store.select('auth').pipe(
take(1),
switchMap((state: State) => {
if (state.token) {
return this.checkPermission(state, route);
} else {
return of(false);
}
}),
map(res => !!res)
);
}