浏览器刷新后,Angular2会保留敏感信息

时间:2017-04-05 14:53:21

标签: angular local-storage session-storage

我的登录操作会返回有关登录用户的信息(如果他们是管理员),请说(isAdmin: true)我可以在组件之间保留此信息,直到浏览器刷新或类似操作。但是在浏览器刷新后我丢失了这些信息。我很困惑如何保留这个值。

我正在使用localStoragesessionStorage来保存一些非敏感信息。但是这些信息很敏感,不允许用户编辑/查看此值。

有没有办法用angular2做到这一点?

4 个答案:

答案 0 :(得分:11)

我会在每次应用程序启动时向服务器或您拥有用户信息的地方进行API调用。因此,当我刷新应用程序时,我从第一手获取信息,而我不必将其存储在会话中,我只是将数据存储在对象中并使用它。

当您登录时生成令牌并将其保存在会话中并将其与我之前提到的API调用一起发送。

这将是我的方法:

  1. 登录 - >生成令牌
  2. 存储令牌
  3. API调用获取用户的信息传递令牌(在App init上)
  4. 希望它有所帮助或至少为您提供一些有价值的想法...让我们知道您如何解决您的问题! :d

答案 1 :(得分:0)

您无法信任客户。如果该用户是管理员,您可以创建一个返回布尔值的API服务,并检查是否设置了isAdmin值。

答案 2 :(得分:0)

sessionStoragelocalStorage应该按design重新加载页面

  

虽然存储在localStorage中的数据没有设置过期,但存储了数据   sessionStorage在页面会话结束时被清除。页面   只要浏览器处于打开状态并且幸存下来,会话就会持续   页面重新加载和恢复。

您应该从API获取数据并将其存储在服务中,因为服务是单例,这意味着它将在应用期间可用,并且不会保留。

import { Injectable } from '@angular/core';
import {Http} from 'angular2/http';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class StorageService {
    private _isAdmin = null;

    constructor(private http: Http) {}

    public get isAdmin() {
            // If we need to fetch the data
            if (_isAdmin === null) {
              return this.http.get('https://myapi.myserver.com')
                   .map((response) => response.json().isAdmin)
                   .do(isAdmin: boolean) { this._isAdmin = isAdmin);
            })
            return Observable.of(this._isAdmin);
    }
}

如果您需要存储更多信息,还可以使用angular-redux或其他存储库

答案 3 :(得分:0)

我在localStorage中保存了一个用户配置文件,我订阅了路由器事件。然后我记录了事件并选择了我遇到问题的路线的开始事件。当事件发生时,我从localStorage重置用户配置文件,该配置文件满足我的AuthGuard检查。现在,只要我刷新,我的数据仍然在那里,我不会被赶出有保障的路线。