【问题标题】:Emit a boolean from AuthGuard - Angular 4从 AuthGuard 发出一个布尔值 - Angular 4
【发布时间】:2018-04-17 06:27:25
【问题描述】:

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

  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 中的布尔值发送到我的导航栏组件吗?

谢谢

【问题讨论】:

    标签: javascript node.js angular jwt


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多