Javascript 在angular6中刷新页面时,用户名将为空
在我的Javascript 在angular6中刷新页面时,用户名将为空,javascript,angular,typescript,angular6,Javascript,Angular,Typescript,Angular6,在我的Dasboard组件中我需要提供一个用户名并发送它 用于获取用户详细信息的表单服务器,如fName、lName、Image 我通过以下方式传递用户名: 当用户登录时,从LocalStorage获取username: 登录组件: private usenameSource = new BehaviorSubject<string>(''); userName$ = this.usenameSource.asObservable(); getDecodedAccessToken(
Dasboard组件中
我需要提供一个用户名
并发送它
用于获取用户详细信息的表单服务器,如fName、lName、Image代码>
我通过以下方式传递用户名
:
当用户登录时,从LocalStorage
获取username
:
登录组件:
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;
})
现在的问题是,当浏览器刷新时,用户名将为空,我需要再次登录
有什么问题吗?如何解决此问题?我假设在启动应用程序时,将首先加载登录组件。
我还假设用户成功登录后,您就在本地存储中存储用户名详细信息。
因此,我们必须首先检查本地存储中的用户名,并在此基础上执行进一步的操作
登录组件
希望这将对您有所帮助。我假设在启动应用程序时,登录组件将首先加载。
我还假设用户成功登录后,您就在本地存储中存储用户名详细信息。
因此,我们必须首先检查本地存储中的用户名,并在此基础上执行进一步的操作
登录组件
希望这对您有所帮助。当页面刷新时,“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);
}
..当页面刷新时,“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);
}
..存储名称为本地存储,然后从中使用它如果您在本地存储中存储了用户名(我在用户名键下使用),然后尝试用它初始化行为主体
:私有使用名称源=新行为主体(localStorage&&localStorage.username |?“”)
@Andriy我可以访问username
这个:username=decode[“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];代码>为什么不使用浏览器的本地存储?它看起来也像decode[”http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name“]
是异步函数,但您可以以同步方式返回其结果。您应该重新检查它…将名称存储为本地存储,然后使用它。如果您在本地存储中存储了用户名
(I aasume在用户名
项下),则尝试用它初始化行为主体
:专用名称源=新行为主体(localStorage&&localStorage.username | |“”)
@Andriy我可以访问username
,它是:username=decode[“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name“];
为什么不使用浏览器的本地存储?它看起来也像decode[”http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"]
是一个异步函数,但您可以以同步方式返回其结果。您应该重新检查它。。。