Javascript 检查angularjs单页应用中页面重新加载的登录状态
我有一个单页angularjs应用程序,在该应用程序中,每当路线发生变化时,我都会在按照此解决方案将登录表单提交到服务器后,通过存储在服务中的变量检查用户的登录状态: //服务Javascript 检查angularjs单页应用中页面重新加载的登录状态,javascript,html,angularjs,single-page-application,angularjs-service,Javascript,Html,Angularjs,Single Page Application,Angularjs Service,我有一个单页angularjs应用程序,在该应用程序中,每当路线发生变化时,我都会在按照此解决方案将登录表单提交到服务器后,通过存储在服务中的变量检查用户的登录状态: //服务 .factory('Auth', function(){ var user; return{ setUser : function(aUser){ user = aUser; }, isLoggedIn : function(){ return(user)? u
.factory('Auth', function(){
var user;
return{
setUser : function(aUser){
user = aUser;
},
isLoggedIn : function(){
return(user)? user : false;
}
}
})
问题是,当我通过刷新按钮重新加载整个页面时,服务中的变量将丢失,用户将被重定向到登录页面,即使用户会话在后端仍处于打开状态
如何仍然管理服务中的变量?我曾想过使用sessionStorage,但听起来不够安全。我认为您可以从两种方式中选择: 通过会话在服务器端持久化数据 将数据存储在localStorage中,或者更好地存储在window.sessionStorage中,这样页面重新加载不会影响申请人
也许angular Cookie可以解决您的问题尝试将数据存储在$window.localStorage angular abstraction over 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;
}]);
}) 您可以在angular应用程序初始化时检查用户的登录状态,并可以在应用程序的根范围内进行设置。因此,它可以在应用程序中的任何位置访问。你可以引导你的用户会话,而不是真正的会话,而是用户详细信息(如果已验证或未定义),然后从后端服务器将其作为javascript注入主视图。在前端,从javascript中读取该变量,即使在刷新后也会有一个持久会话。我想到了localStorage和sessionStorage,但我怀疑sessionStorage的安全性只有应用程序窗口可以访问数据,而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;
}]);