跨视图的本地存储值不一致 angularjs

Inconsistent local storage values across views angularjs

我正在 angularjs 中构建应用程序。我的后端使用令牌来管理会话。令牌在 header 中的每个请求上发送,响应包含一个 header 和我应该更新的新令牌值。

我正在使用 localStorage 来存储令牌值。我遇到的问题如下:

例如,当我输入路由 /users 时,我请求用户,在 header 中接收令牌并在 本地更新它本地存储。然后我转到 /products,例如,我请求产品,接收另一个令牌并在 localStorage 上本地更新它。当我回到/users,浏览器,或者angularjs,或者ui-router,我真的不知道是谁在做,正在从缓存中获取视图,问题是 localStorage 也有缓存值,它有一个旧的标记值,这是无效的,从那里到后端的任何请求都将无法通过身份验证。

任何人都知道克服这个问题的线索吗?我希望我的 localStorage 在视图之间保持一致,即使它们被缓存,我不希望我的 localStorage 被缓存。

非常感谢您的帮助!

更新

这就是我通过 auth 服务管理 localStorage 的方式。

auth.saveToken = function(token) {
    $window.localStorage['my-token'] = token;
};

auth.getToken = function() {
    return $window.localStorage['my-token'];
};

auth.removeToken = function() {
    $window.localStorage.removeItem('my-token');
};

要关闭 http 级缓存,您可以

  • 调整服务器发出的缓存 header 配置,使其不允许浏览器缓存响应 - 类似于 response.header('Expires', '-1');
  • 添加一个始终更改您发送到服务器的请求的查询参数(例如 domain.com/api/something?timestamp=12341234

我想我已经知道问题出在哪里了。在我的 users 服务中,我设置了一个名为 'all' 的属性,如下所示:

users.all = Restangular.all('users').getList();

因为它不是函数,所以在使用 users.all 时,我正在访问第一次从 Restangular.all( 'users').getList();.

这就是为什么响应似乎是 "cached"。完全是我的错。

解决方案是使 users.all 成为一个函数,如下所示:

users.all = function() {
    return Restangular.all('users').getList();
};