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