Html localStorage.getItem在我的存储堆栈中看到该项时提供null-4
我使用localStorage在其中存储我的身份验证令牌。 在存储器中设置项目后,我无法再次获取它!此时,我可以在浏览器本地存储堆栈中看到该项 另外,当我在设置之后获取并控制台该项目时,一切正常,控制台会记录我的项目 注意: 我所做的只是在Angular 4SPA中进行用户身份验证等。当我想在组件的构造函数中检查我的令牌时,给我null 更新: 以下是我使用的代码: 在获取令牌后的Html localStorage.getItem在我的存储堆栈中看到该项时提供null-4,html,angular,Html,Angular,我使用localStorage在其中存储我的身份验证令牌。 在存储器中设置项目后,我无法再次获取它!此时,我可以在浏览器本地存储堆栈中看到该项 另外,当我在设置之后获取并控制台该项目时,一切正常,控制台会记录我的项目 注意: 我所做的只是在Angular 4SPA中进行用户身份验证等。当我想在组件的构造函数中检查我的令牌时,给我null 更新: 以下是我使用的代码: 在获取令牌后的AuthService.ts中: localStorage.setItem('currentUser', itemD
AuthService.ts
中:
localStorage.setItem('currentUser', itemData);
这就是洞AuthService.ts
import {Injectable} from '@angular/core';
import {Http, Response} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class AuthService {
public token: string;
public userRole: number;
constructor(private http: Http) {
this.initCurrentUser();
}
initCurrentUser() {
const currentUser = JSON.parse(localStorage.getItem('currrentUser'));
this.token = currentUser && currentUser.token;
this.userRole = currentUser && currentUser.role;
}
isAuthenticated(): boolean {
return !!this.token;
}
logout(): void {
this.token = null;
this.userRole = null;
localStorage.removeItem('currentUser');
}
login(email: string, password: string): Observable<boolean> {
return this.http.post('http://localhost:8000/api/login',
{email: email, password: password})
.map((response: Response) => {
try {
let token = response.json() && response.json().token;
if (token) {
this.token = token;
let itemData= JSON.stringify({email: email, token: token});
localStorage.setItem('currentUser', itemData);
return true;
} else {
return false;
}
} catch (e) {
return false;
}
});
}
}
在每次身份验证检查中,我都检查了我在auth服务中拥有的令牌,我认为这就是重点 我将
initCurrentUser()
方法放在ngOnInit
中,而不是构造函数中。在每次身份验证检查中,我都会从本地存储中提取用户数据,并对其进行一些处理以检查用户身份验证
下面是我解决问题的最终代码:
ngOnInit() {
let currentUser = JSON.parse(localStorage.getItem('currrentUser'));
if (currentUser) {
this.token = currentUser.token;
this.userRole = currentUser.role;
} else {
console.log('not get on init!');
}
}
isAuthenticated(): boolean {
let data = localStorage.getItem('currentUser');
this.token = JSON.parse(data) && JSON.parse(data).token;
this.userRole = JSON.parse(data) && JSON.parse(data).role;
return !!this.token;
}
在每次身份验证检查中,我都检查了我在auth服务中拥有的令牌,我认为这就是重点 我将
initCurrentUser()
方法放在ngOnInit
中,而不是构造函数中。在每次身份验证检查中,我都会从本地存储中提取用户数据,并对其进行一些处理以检查用户身份验证
下面是我解决问题的最终代码:
ngOnInit() {
let currentUser = JSON.parse(localStorage.getItem('currrentUser'));
if (currentUser) {
this.token = currentUser.token;
this.userRole = currentUser.role;
} else {
console.log('not get on init!');
}
}
isAuthenticated(): boolean {
let data = localStorage.getItem('currentUser');
this.token = JSON.parse(data) && JSON.parse(data).token;
this.userRole = JSON.parse(data) && JSON.parse(data).role;
return !!this.token;
}
在我的例子中,我错误地放置了键而不是值。确保按正确的顺序传递:
localStorage.setItem('key','value');
在我的例子中,我错误地放置了键而不是值。确保按正确的顺序传递:
localStorage.setItem('key','value');
如果你想有人帮你的地方也你的code@KrzysztofLa我添加了一些代码。理解这一点就足够了吗?这只是一个猜测,但是当您调用auth.initCurrentUser()时,是否可以检查问题是否存在;在ngOnInit()中而不是在构造函数中?我支持@KrzysztofLa-你不应该在构造函数中初始化变量,你应该在ngOnInit()中进行初始化。我将抓取逻辑放在ngOnInit()中,一切都正常!我还编写了另一种检查身份验证的方法,在该方法中,我每次都从本地存储手动获取用户信息(而不是通过检查身份验证服务令牌)code@KrzysztofLa我添加了一些代码。理解这一点就足够了吗?这只是一个猜测,但是当您调用auth.initCurrentUser()时,是否可以检查问题是否存在;在ngOnInit()中而不是在构造函数中?我支持@KrzysztofLa-你不应该在构造函数中初始化变量,你应该在ngOnInit()中进行初始化。我将抓取逻辑放在ngOnInit()中,一切都正常!我还编写了另一种检查身份验证的方法,在该方法中,我每次都从本地存储手动获取用户信息(而不是通过检查身份验证服务令牌)。