AngularJS如何在cookie过期时收到通知

时间:2015-06-09 17:02:01

标签: angularjs authentication cookies

我正在运行AngularJS-App(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吗? 这看起来对我来说太过分了。

解决此问题的最佳做法是什么?

0 个答案:

没有答案