Angular-永久用户信息的存储位置(本地存储除外)

时间:2019-11-25 12:57:17

标签: angular security jwt

在一个通过JWT进行身份验证的系统上,在本地存储上JWT设置在一个变量上,而用户角色在本地存储上的另一个变量上设置。但是,所有信息(包括JWT)都是通过CryptoJS加密的,然后在侧边栏上,例如,我们有ngIfs仅用于显示具有某些角色的用户的某些菜单。所有这些ngIfs调用一种方法,该方法对本地存储上的数据进行解密以获取用户角色,然后执行验证。问题在于,多个图标/侧边栏图标/等中的所有这些解密都开始使系统真正变慢。
那么,在这种情况下,有人对在哪里保存用户数据有想法吗? :)

2 个答案:

答案 0 :(得分:0)

您可以使用:

Service :可以从任何组件访问的共享服务(在根模块中声明),请确保首先解密信息并将其存储在内部的变量中您的服务。

Store :Redux之类的东西,您可以在其中存储解密的用户信息,并从任何地方访问它。

答案 1 :(得分:0)

我使用的一般规则是,在*ngIf之类的东西上使用函数,在每个摘要周期对其进行处理。这就是为什么您的表现受到打击的原因。尝试将console.log()放入解密函数中,看看每秒被调用多少次。

您可以将加密的值存储在本地存储中,然后使用服务将解密的值存储在内存中。然后,您调用服务以获取解密的值。然后,如果用户刷新页面,则必须再次对其解密一次,然后传递解密后的值。这是我正在谈论的示例。

service.ts

decryptedValue = null;

getDecryptedValue() {
    if (!decryptedValue) {
        this.decryptedValue = this.decrypt(localStorage.getItem('encryptedValueKey'));
    }
    return this.decryptedValue;
}

component.ts

temp = null;

ngOnInit() {
    this.temp = this.service.getDecryptedValue();
}

然后,您可以从所需的任何组件调用该服务,并且与您现在正在执行的操作相比,它应该相当快