有没有办法随时使用angularjs检查客户端localstorage?我想这样做的原因是因为我在用户登录时在本地存储中设置了JSON Web令牌。此外,我正在使用
$rootScope.$on('$routeChangeStart', function() {});
检查令牌。一旦发现它已过期,用户就会被注销。但是,使用此方法,用户必须发出API请求才能重新初始化检查。有没有办法观察存储在localStorage中的令牌,并在它到期后立即将用户注销而不需要API请求?
答案 0 :(得分:0)
能够使用@IAMDranged的建议:
{{1}}
答案 1 :(得分:-1)
当您创建/获取令牌时,您不知道它将在多长时间后到期?因为如果您知道可以在localStorage
中保存到期时间/日期,并且在加载页面或更改令牌(用户登录或注销)时使用setTimeout
在令牌应该注销用户时过期了。
如果您不知道到期时间(我认为是这种情况),您最好认为可以在每次请求时将令牌发送到服务器并让服务器在每次请求时检查令牌(考虑使用cookie
而不是localStorage
),如果令牌没问题,让服务器完成工作,否则让服务器返回403 http error
,并在客户端使用$httpInterceptor
检查服务器是否返回状态403
并注销用户(而不是在每次状态更改时检查令牌的请求)。
编辑:添加代码示例(针对第一个解决方案)。你也应该在令牌改变时调用这个函数。
angular.module('...')
.run(['$timeout', function ($timeout) {
var _timeout;
function deleteTokenTimeout() {
if (_timeout) {
_timeout.cancel();
}
_timeout = $timeout(function () {
// remove the token
}, new Date(localStorage.getItem('expiration')) - new Date());
}
deleteTokenTimeout();
}]);