跨视图的本地存储值不一致 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();
};
我正在 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();
};