Angular OpenID:在浏览器中加载应用程序之前重定向到登录

Posted

技术标签:

【中文标题】Angular OpenID:在浏览器中加载应用程序之前重定向到登录【英文标题】:Angular OpenID: Redirect to login before app loads in browser 【发布时间】:2021-10-20 06:39:39 【问题描述】:

我正在使用带有angular-oauth2-oidc 的Angular 12,到目前为止我已经成功设置了身份验证。但是,就在被重定向到登录之前,正在加载应用程序(仅一瞬间,但仍然如此)。除非您已登录,否则有什么方法可以完全隐藏应用程序?

【问题讨论】:

你可以看看APP_INITIALIZER。如果您从中返回一个 observable,它将等待它完成,然后再继续初始化应用程序。 angular.io/api/core/APP_INITIALIZER @OctavianMărculescu 我尝试了这种方法,但是我仍然遇到与描述相同的问题,不完全确定原因。在引导 @​​987654325@ 之前尝试使用 DoBootstrap 加载身份验证会产生相同的问题。我最终通过将APP_INITIALIZER 与 AuthGuard 结合起来解决了这个问题。 【参考方案1】:

如果您正在使用路由,那么您可以考虑使用guards 来防止在用户未经授权的情况下加载任何路由。 警卫看起来像

class AuthenticatedGuard implements CanActivate 
  userLoggedIn = AuthService.isLoggedIn;
  canActivate() 
    if (this.userLoggedIn) 
     return true;
     else 
     return false;
    
  

然后,为了防止应用加载需要授权的路由,在路由模块中,您可以使用 canActivate 属性单独添加警卫,甚至将它们作为路由的子级以节省一些时间,如下所示:

    
  path: '',
  component: AppComponent,
  canActivate: [AuthenticatedGuard],
  children: [
      path: '', component: HomeComponent , // Other routes here
  ]

【讨论】:

以上是关于Angular OpenID:在浏览器中加载应用程序之前重定向到登录的主要内容,如果未能解决你的问题,请参考以下文章

使用 require 在 Angular 11 应用程序中加载图像

构建混合 angular/angularjs 应用程序 - 如何在 angularjs 应用程序中加载 Angular 模块

如何在 div 中加载外部 Angular 应用程序? [关闭]

使用 Angular 7 在混合应用程序中加载 Angularjs 包

如何在 Angular + Webpack + Heroku 应用程序中加载应用程序之前包含 CSS

如何在 Angular Electron 中加载模块?