AngularJS如何在cookie过期时获得通知
我有一个AngularJS应用程序(1.4.0)正在运行 用户登录后,来自服务器的令牌将存储在此单例服务中AngularJS如何在cookie过期时获得通知,angularjs,authentication,cookies,Angularjs,Authentication,Cookies,我有一个AngularJS应用程序(1.4.0)正在运行 用户登录后,来自服务器的令牌将存储在此单例服务中 angular.module('logit').factory('SessionManager' , SessionManager); function SessionManager($http,$cookies,$rootScope) { var SessionManager = {}; var user = null; var token = null;
angular.module('logit').factory('SessionManager' , SessionManager);
function SessionManager($http,$cookies,$rootScope) {
var SessionManager = {};
var user = null;
var token = null;
SessionManager.login = function(username,password,success,error) {
$http.post(
$rootScope.url + "rest-auth/login/",
{'username':username,'password':password}).success(
function(data){
SessionManager.setToken(data.key);
SessionManager.loadUser(success,error);
}).error(
function(err){
if(error != null)error(err);
});
};
SessionManager.logout = function(success,error){
$http.post($rootScope.url+"rest-auth/logout/").success(
function(data){
SessionManager.setToken(null);
user = null;
if(success != null)success(data);
}).error(function(err){
SessionManager.setToken(null)
if(error != null)error(err);
});
};
SessionManager.setToken = function( newToken ) {
token = newToken;
if(newToken != null){
if($cookies.get("token") == null){
//Token als Cookie für 30 Tage speichern speichern
var expireDate = new Date();
expireDate.setSeconds(expireDate.getSeconds() + 5);
$cookies.put("token",newToken,{'expires': expireDate});
}
}else{
$cookies.remove("token");
}
$http.defaults.headers.common["Authorization"]=(newToken != null)?"Token " + newToken:null;
};
SessionManager.loadUser = function(success, error){
$http.get("http://localhost:7777/rest-auth/user/").success(
function(data){
user = data;
if(success != null)success(data);
}
).error(function(err){
if(error != null)error(err);
}
);
};
SessionManager.getToken = function() {
return token;
};
SessionManager.isLoggedIn = function(){
return SessionManager.getToken() != null;
}
SessionManager.getUser = function(){
return user;
}
return SessionManager;
此外,它还存储在cookie中。如果令牌存在,我将签入run函数,如果存在,我将其存储在服务中
if($cookies.get("token") != null){
SessionManager.setToken($cookies.get("token"));
}
我现在想显示登录屏幕,如果cookie过期(带有拦截器)
cookie过期时将从浏览器中正确删除。但是我的令牌仍然存储在服务中。我怎么知道饼干不存在?我应该在每个$http请求上检查cookie吗?
对我来说,这看起来太过分了
解决此问题的最佳做法是什么?从
现在开始
获取差异,直到令牌过期为止。创建一个$timeout,它将触发一个函数,该函数将用户状态更改为unhorized
。当然,您必须将cookie过期日期作为cookie字符串的一部分存储,这不太安全。谢谢,我没有想到:)。为什么会不那么安全呢?我怎样才能预防呢?此用例必须有一个保存最佳实践。因为用户将能够更改该字符串。虽然他无法更改实际的到期日期。