Angular 2 auth guard - 我的应用程序需要在加载任何路由之前首先进行身份验证。我该如何处理?

时间:2016-12-22 18:47:27

标签: angular

基本上,我的AppComponent app.component.html(我的引导程序组件)看起来如何:

<navigation-top>
<router-outlet></router-outlet>

在我的AppComponent ngOnInit我正在调用我的身份验证服务,该服务会返回一个令牌。我需要此令牌来发送每个API请求。

if (!tokenNotExpired()) {
  this.authService.login()
  .subscribe(
    data => {
      const key = data.headers.get('Authorization');
      this.key = key;
      localStorage.setItem('id_token', key);
    }
  );
} else {
  this.key = localStorage.getItem('id_token');
}

但是,我还在我的app.routes.ts添加了一个Auth Guard,以便router-outlet只有在有令牌后才会加载组件。

但是,我不确定解决此问题的最佳方法。如果我拨打电话获取AppComponent中的令牌,那么在开始时,如果我根本没有钥匙,我的Auth Guard将返回false,因此不会加载任何内容。

如何设置逻辑以便等待密钥?

1 个答案:

答案 0 :(得分:0)

我将从Auth Guard本身运行身份验证代码,因为它在AppComponent的{​​{1}}之前加载。

那对我有用。可能会有更优雅的方法。