视图angularjs

时间:2015-05-22 19:10:56

标签: angularjs local-storage angular-ui-router

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

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

例如,当我输入路径 / users 时,我请求用户,在标头中接收令牌并在 localStorage 上本地更新。然后我转到 / 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');
};

2 个答案:

答案 0 :(得分:1)

关闭http级别缓存,你可以

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

答案 1 :(得分:0)

我想我已经弄明白问题是什么了。在我的用户服务中,我设置了一个名为' all'像这样:

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

由于它不是一个函数,当使用 users.all 时,我正在访问第一次从 Restangular.all(' users')返回的promise。 ();

这就是为什么响应似乎被缓存了#34;这完全是我的错。

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

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