首页 > 解决方案 > 在 angular6 中刷新页面时,用户名将为空

问题描述

在我的Dasboard Component我需要提供username并发送表单服务器以获取用户的详细信息,例如fName , lName , Image , . . .

我通过username这种方式:

当用户登录时,我会得到username来自LocalStorage

登录组件:

private usenameSource = new BehaviorSubject<string>('');
userName$ = this.usenameSource.asObservable();

getDecodedAccessToken(): any {
  return jwt_decode(this.getRawAuthToken(AuthTokenType.AccessToken));
}

getUserNameDecode():any {
  const decode = this.getDecodedAccessToken();
  let userName = decode["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];
  return this.usenameSource.next(userName);
}

仪表板组件:

this.loginService.userName$.subscribe((data) => {
  this.userName = data;
})

现在,问题是当浏览器刷新时,用户名将为空,我需要再次登录。

有什么问题 ?我怎么解决这个问题 ?

标签: javascriptangulartypescriptangular6

解决方案


当页面刷新时,“usenameSource”值将被清除。要保留它,请在您的服务构造函数中再次调用您的方法“getUserNameDecode()”。

constructor(...) {
    this.getUserNameDecode();
}

getUserNameDecode():any {
   const decode = this.getDecodedAccessToken();

   if(!decode) {
      // login failed
      return;
   }

   let userName = decode["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];
   return this.usenameSource.next(userName);
}

……


推荐阅读