angular 4 localstorage缓存

时间:2017-10-23 01:56:18

标签: angular local-storage browser-cache angular-local-storage

我用

localStorage.setItem('currentUser')

保存我当前的用户数据,如令牌等

我已经使用localStorage.removeItem('currentUser')在用户注销时删除了我的用户数据,但是当我在注销时以不同的用户身份登录时,我的localStorage仍然保留最后一个用户而不是当前用户

下面是我设置localStorage的代码

return this.http.post(environment.api_host + '/login', params.toString(), options)
      .map((response: Response) => {

const user = response.json().returnBody;
    if (user && user.token) {
      localStorage.setItem('currentUser', JSON.stringify(user));
    }
  });

这是注销

localStorage.removeItem('currentUser');

更新

下面是我检查当前用户令牌状态的代码(我把它放在我所有页面中调用的NotificationService上)

if (error.json().error === 'token_expired') {
      swal('Session expired', 'Please login again !', 'error').then(() => {
        this._authService.logout();
        window.location.reload();
      });
    }

我也使用canActivate

中的Routes
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if (localStorage.getItem('currentUser')) {
        // logged in so return true
        return true;
    }

    // not logged in so redirect to login page with the return url
    this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
    return false;
}

但是当我尝试禁用浏览器缓存或刷新浏览器缓存时,它已更改

有办法解决这个问题,所以我不需要刷新浏览器缓存吗?

谢谢

1 个答案:

答案 0 :(得分:0)

你在使用铬吗?如果是这样,他们只是针对导致您问题的错误修正了问题:https://bugs.chromium.org/p/chromium/issues/detail?id=765524

所以我们遇到了我们的Chrome版本问题,为了克服它我们必须做的事情

localStorage.setItem('currentUser', '');
localStorage.removeItem('currentUser');

如果我们这样做,那就有效了。如果我们没有,只是使用removeItem它会清除,但在刷新它会回来。