angular 服务中的本地存储未刷新
localstorage not getting refreshed in angular service
我正在使用 angular 6 和 localStorage
来保存授权令牌。
从localStorage获取authtoken的代码是:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + JSON.parse(localStorage.getItem('userdetails')).token
})
};
并将其用作
getCities() {
return this.http.get<any>('http://myservice.com/api/cities', httpOptions);
}
当我注销时,我正在清除 localStorage
并重定向到主页
localStorage.clear();
this.router.navigate(['/']);
登录时,我将 userdetails
localStorage 项目设置为
this.loginService.login(obj)
.subscribe(
auth => {
localStorage.setItem('userdetails', JSON.stringify(auth));
this.router.navigate(['authentication/auth/redirectpage']);
}
);
我保存的授权对象是这样的:
{"fullname":"Test User","username":"TestUser1","authlevel":"Q","designation":"Tester 1","token":"First_Login_Token"}
当我第一次登录时,一切正常。当我注销时,userdetails
localStorage 元素被破坏(在 Chrome DevTools 的应用程序选项卡中的本地存储中检查时。
当我用不同的用户重新登录时,我的 userdetails
正确更新为
{"fullname":"Test User 2","username":"TestUser2","authlevel":"R","designation":"Tester 2","token":"Second_Login_Token"}
但是
localStorage.getItem('userdetails')).token
仅在 locationService returns First_Login_Token
中。
If i reload the page, it is properly taking Second_Login_Token
.
不确定出了什么问题。
好的,我找到问题了。
const httpOptions
是罪魁祸首。
我已将它设为 class 中的变量,并在
等每个方法中设置它
export class LocationService {
httpOptions: any;
constructor(private http: HttpClient) {
}
getcities() {
this.httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + JSON.parse(localStorage.getItem('userdetails')).token
})
};
return this.http.get<any>('http://myservice.com/api/cities', this.httpOptions);
}
.
.
.
现在,一切都很好。无论如何谢谢!!!
我遇到了几乎相同的问题,发现我在声明部分调用了 localStorage,这就是它为空的原因。如果你有 localstorage 在构造函数之后调用它,你应该先声明变量。谢谢拉克什曼!
service.ts
header:任意
构造函数
header = 本地存储....
我正在使用 angular 6 和 localStorage
来保存授权令牌。
从localStorage获取authtoken的代码是:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + JSON.parse(localStorage.getItem('userdetails')).token
})
};
并将其用作
getCities() {
return this.http.get<any>('http://myservice.com/api/cities', httpOptions);
}
当我注销时,我正在清除 localStorage
并重定向到主页
localStorage.clear();
this.router.navigate(['/']);
登录时,我将 userdetails
localStorage 项目设置为
this.loginService.login(obj)
.subscribe(
auth => {
localStorage.setItem('userdetails', JSON.stringify(auth));
this.router.navigate(['authentication/auth/redirectpage']);
}
);
我保存的授权对象是这样的:
{"fullname":"Test User","username":"TestUser1","authlevel":"Q","designation":"Tester 1","token":"First_Login_Token"}
当我第一次登录时,一切正常。当我注销时,userdetails
localStorage 元素被破坏(在 Chrome DevTools 的应用程序选项卡中的本地存储中检查时。
当我用不同的用户重新登录时,我的 userdetails
正确更新为
{"fullname":"Test User 2","username":"TestUser2","authlevel":"R","designation":"Tester 2","token":"Second_Login_Token"}
但是
localStorage.getItem('userdetails')).token
仅在 locationService returns First_Login_Token
中。
If i reload the page, it is properly taking
Second_Login_Token
.
不确定出了什么问题。
好的,我找到问题了。
const httpOptions
是罪魁祸首。
我已将它设为 class 中的变量,并在
等每个方法中设置它export class LocationService {
httpOptions: any;
constructor(private http: HttpClient) {
}
getcities() {
this.httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + JSON.parse(localStorage.getItem('userdetails')).token
})
};
return this.http.get<any>('http://myservice.com/api/cities', this.httpOptions);
}
.
.
.
现在,一切都很好。无论如何谢谢!!!
我遇到了几乎相同的问题,发现我在声明部分调用了 localStorage,这就是它为空的原因。如果你有 localstorage 在构造函数之后调用它,你应该先声明变量。谢谢拉克什曼!
service.ts header:任意
构造函数
header = 本地存储....