AngularJS如何在cookie过期时获得通知

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;

我有一个AngularJS应用程序(1.4.0)正在运行

用户登录后,来自服务器的令牌将存储在此单例服务中

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字符串的一部分存储,这不太安全。谢谢,我没有想到:)。为什么会不那么安全呢?我怎样才能预防呢?此用例必须有一个保存最佳实践。因为用户将能够更改该字符串。虽然他无法更改实际的到期日期。