我在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');
};
答案 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();
};