在angularjs单页面应用中检查页面重新加载时的登录状态

时间:2015-04-28 06:18:49

标签: javascript html angularjs single-page-application angularjs-service

我有一个单页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,但听起来不够安全。

3 个答案:

答案 0 :(得分:0)

我认为你可以从两种方式中选择:

  • 通过会话
  • 在服务器端保留数据
  • 将您的数据存储在localStorage中,甚至更好地存储在window.sessionStorage中,以便页面重新加载不会影响您的申请人

答案 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;
}]);

})();

相关问题