Angular 7 + SSO - 重定向到授权服务器的位置

问题描述 投票:0回答:1

如果用户已登录并且未重定向到授权服务器,我需要检查应用程序加载。角色项目中最好的地方是什么?在用户可以看到任何组件之前,我想这样做。

angular angular7
1个回答
1
投票

如您所知,角度应用程序是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。

© www.soinside.com 2019 - 2024. All rights reserved.