我的登录操作会返回有关登录用户的信息(如果他们是管理员),请说(isAdmin: true)
我可以在组件之间保留此信息,直到浏览器刷新或类似操作。但是在浏览器刷新后我丢失了这些信息。我很困惑如何保留这个值。
我正在使用localStorage
和sessionStorage
来保存一些非敏感信息。但是这些信息很敏感,不允许用户编辑/查看此值。
有没有办法用angular2做到这一点?
答案 0 :(得分:11)
我会在每次应用程序启动时向服务器或您拥有用户信息的地方进行API调用。因此,当我刷新应用程序时,我从第一手获取信息,而我不必将其存储在会话中,我只是将数据存储在对象中并使用它。
当您登录时生成令牌并将其保存在会话中并将其与我之前提到的API调用一起发送。
这将是我的方法:
希望它有所帮助或至少为您提供一些有价值的想法...让我们知道您如何解决您的问题! :d
答案 1 :(得分:0)
您无法信任客户。如果该用户是管理员,您可以创建一个返回布尔值的API服务,并检查是否设置了isAdmin值。
答案 2 :(得分:0)
sessionStorage
和localStorage
应该按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检查。现在,只要我刷新,我的数据仍然在那里,我不会被赶出有保障的路线。