我有一个单页angularjs应用程序,其中每当路由发生变化时,我都会根据此解决方案{{3将存储在服务中的变量(在将登录表单提交到服务器之后)检查用户的登录状态}}:
app.run(['$rootScope', '$location', 'Auth', function ($rootScope, $location, Auth) {
$rootScope.$on('$routeChangeStart', function (event) {
if (!Auth.isLoggedIn()) {
console.log('DENY');
event.preventDefault();
$location.path('/login');
}
else {
console.log('ALLOW');
$location.path('/home');
}
});}]);
//服务
.factory('Auth', function(){
var user;
return{
setUser : function(aUser){
user = aUser;
},
isLoggedIn : function(){
return(user)? user : false;
}
}
})
问题是,当我重新加载整个页面时(通过刷新按钮),服务中的变量将丢失,即使用户会话仍在后端,用户也会被重定向到登录页面。
我如何仍然管理服务中的变量?我想过使用sessionStorage
,但听起来不够安全。
答案 0 :(得分:0)
我认为你可以从两种方式中选择:
答案 1 :(得分:0)
也许angular-cookies可以解决您的问题
答案 2 :(得分:0)
尝试将数据存储在$ window.localStorage(javascript window.localStorage上的角度抽象)
例如:
(function () {
angular.module('app').factory('UserIdentity', ['$window', function ($window) {
this.UserName = function () {
return $window.localStorage.getItem("username");
};
this.Token = function () {
return $window.localStorage.getItem("token");
};
this.create = function (token, userName) {
$window.localStorage.setItem("token", token);
$window.localStorage.setItem("username", userName);
};
this.destroy = function () {
$window.localStorage.removeItem("token");
$window.localStorage.removeItem("username");
};
this.isAuthenticated = function () {
var token = $window.localStorage.getItem("token");
return !!token;
}
return this;
}]);
})();