从AuthGuard - Angular 4发出一个bolean

时间:2017-11-04 18:29:49

标签: javascript node.js angular jwt

我在服务器节点中使用JWT来检查用户是否已连接。 在一个可观察的AuthGuard中,它将检查我的用户是否已连接:

  canActivate(): Observable<any> {
    if ( !localStorage.getItem('currentUser')){
      return Observable.of(false);
    }
    // Authorization with JWT Token
    const options = {
      headers: new HttpHeaders().set('Authorization', 'BEARER ' + localStorage.getItem('currentUser') )
    };
    //Check if the JWT Token is always available and if the signature is right
    return this.http.get(environment.api + 'checkToken', options )
      .map(() => true).catch(() => {
        return Observable.of(false);
      });
  }

现在我想从canActivate向其他组件发出布尔值。我的另一个组件是我网站的导航栏。我想在用户断开连接时隐藏导航栏中的一些链接。但是,我希望在用户连接时显示一些元素。

但即使我在导航栏组件的构造函数中使用了一个observable,如果用户已连接,它也只会检查一次。

你有什么想法从我的AuthGuard向我的导航栏组件发出bolean吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以在路线上使用resolve,并在解析器类中执行几乎相同的操作。然后,您可以通过注入ActivatedRouteSnapshot从组件访问布尔值(或用户对象本身,如果您解决它)。
或者,如果您不想要往返,那么您可以在从canActivate返回之前订阅observable并将值发送到包含Subject的某个服务,这样您就可以注入服务到您的组件并使用该主题。