【问题标题】:How to clear the cache while clearing localstorage清除本地存储时如何清除缓存
【发布时间】:2017-08-30 18:19:42
【问题描述】:

我在登录时在本地存储中设置了一个身份验证令牌,并在注销时将其清除。注销后,如果用户尝试再次登录,则使用从缓存中获取的旧身份验证令牌,而不是新设置的值。如何在清除本地存储的同时清除缓存。我在我的应用程序中使用 angular 2。

登录:

localstorage.setItem("token", "value")

退出:

localstorage.clear();

【问题讨论】:

  • 你需要在你的js代码中清除内存中的token
  • 我也尝试过 localstorage.removeItem("token") 。仍然面临同样的问题
  • 您是否将令牌存储在内存 anny 中,就像在变量 somwhere 中一样?
  • 喜欢你的身份验证服务
  • @TimCodes - 我也面临同样的问题。 Identity Server 的 ReactJs - OIDC Client 中存在相同问题。

标签: javascript html angular


【解决方案1】:

在执行localstorage.clear();之前,你必须删除元素;为此,您的代码应如下所示: localStorage.removeItem('Token'); localstorage.clear();

请注意,如果您使用的是 BehaviorSubject,您还必须将其设置为 null; 假设如下:

private loggedInUserSubject: BehaviorSubject<User>;
public loggedInUser: Observable<User>;

并在构造函数中,获取用户的值:

this.loggedInUserSubject= new BehaviorSubject<User>(JSON.parse(localStorage.getItem('loggedInUser')));
this.loggedInUser= this.loggedInUserSubject.asObservable();

然后退出:

    localStorage.removeItem('currentUser');
    this.currentUserSubject.next(null);
    localstorage.clear();

希望对你有帮助:D

【讨论】:

    【解决方案2】:

    您如何确信会发生注销?
    如果用户只关闭浏览器怎么办?

    我建议除了安全令牌之外还保存一个时间戳
    并为凭据提供类似的时间。

    localStorage['token_time'] = ''+myDate.getTime();
    // And to restore it :
    var myDate = new Date(parseInt(localStorage['token_time'], 10));
    

    【讨论】:

      猜你喜欢
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2012-04-12
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多