我正在运行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吗? 这看起来对我来说太过分了。
解决此问题的最佳做法是什么?