如果用户已登录并且未重定向到授权服务器,我需要检查应用程序加载。角色项目中最好的地方是什么?在用户可以看到任何组件之前,我想这样做。
如您所知,角度应用程序是SPA,页面导航仅涉及软路由。为了防止未经授权访问应用程序中的任何页面,您应该为所有路由定义提供路由保护(CanActivate实现)。我在下面分享代码示例。 AccessValidator正在实现CanActivate接口,并定义了将未经授权的访问尝试重定向到登录屏幕所需的逻辑。
export class AccessValidatorService implements CanActivate {
constructor(public router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
let result = true;
if (this.shouldNavigateToLogin()) { // this check is up to you
this.router.navigateByUrl('/' + LoginScreenComponent.ROUTE_PATH);
result = false;
}
return of(result);
}
// ...
}
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'example_screen',
component: ExampleScreenComponent,
canActivate: [AccessValidatorService]
}
])
],
providers: [AccessValidatorService]
})
进一步深入解释:https://angular.io/api/router/CanActivate
如果你想在每个http请求(服务调用等)之前检查会话有效性,你应该这样做是实现一个HttpInterceptor。您可以按照this一步一步的教程来解释如何实现HttpInterceptor。