Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html localStorage.getItem在我的存储堆栈中看到该项时提供null-4_Html_Angular - Fatal编程技术网

Html localStorage.getItem在我的存储堆栈中看到该项时提供null-4

Html localStorage.getItem在我的存储堆栈中看到该项时提供null-4,html,angular,Html,Angular,我使用localStorage在其中存储我的身份验证令牌。 在存储器中设置项目后,我无法再次获取它!此时,我可以在浏览器本地存储堆栈中看到该项 另外,当我在设置之后获取并控制台该项目时,一切正常,控制台会记录我的项目 注意: 我所做的只是在Angular 4SPA中进行用户身份验证等。当我想在组件的构造函数中检查我的令牌时,给我null 更新: 以下是我使用的代码: 在获取令牌后的AuthService.ts中: localStorage.setItem('currentUser', itemD

我使用localStorage在其中存储我的身份验证令牌。 在存储器中设置项目后,我无法再次获取它!此时,我可以在浏览器本地存储堆栈中看到该项

另外,当我在设置之后获取并控制台该项目时,一切正常,控制台会记录我的项目

注意: 我所做的只是在Angular 4SPA中进行用户身份验证等。当我想在组件的构造函数中检查我的令牌时,给我null

更新: 以下是我使用的代码:

在获取令牌后的
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()中,一切都正常!我还编写了另一种检查身份验证的方法,在该方法中,我每次都从本地存储手动获取用户信息(而不是通过检查身份验证服务令牌)。