【问题标题】:On page refresh clears variables in angularjs still the token is alive在页面刷新时清除 angularjs 中的变量,令牌仍然存在
【发布时间】:2017-08-18 07:49:56
【问题描述】:

我是 angularjs 的新手,通过使用 jsonwebtokens 生成的令牌在登录页面中进行身份验证。验证后重定向到主页。当我刷新页面时,所有变量都被清除显示什么。 下面的代码是用于认证的登录功能。

app.factory("authenticationSvc", ["$http","$q","$window","$location","$rootScope", function ($http, $q, $window,$location,$rootScope) {
    var userInfo;
    $rootScope.loggedIn == false; 
    function login (uName, uPwd)
        {
            var deferred = $q.defer();
            $http({                 
                    method: "POST",
                    url: "/api/login",
                    data: { 
                            uName       : uName,
                            pwd         : uPwd
                          }   
                }).then(function(result)
                            {   
                                if (result.data.access_token != null)
                                {
                                  userInfo =    {
                                                    resToken : result.data.access_token,
                                                    resuName : result.data.uName,
                                                    resfName : result.data.fName,
                                                    reslName : result.data.lName
                                                };
            $window.sessionStorage["userInfo"] = JSON.stringify(userInfo);


                                    deferred.resolve(userInfo);
                                }
                                else if (result.data.access_token == null)
                                {
                                    var userErr = {
                                                resErr   : result.data.err,
                                                resuName : result.data.uName 
                                              };    
                                   console.log("This is userErr "+ userErr.resErr + " " +  userErr.resuName);
                                   deferred.resolve(userErr);
                                }
                            },function (error) {
                                                deferred.reject(error);                     
                                               }
                        );
                            return deferred.promise;
        }
    function logout() 
    {
        var deferred = $q.defer();
        $http({
            method: "POST",
            url: "/api/logout",
            headers: {
                        "access_token": userInfo.resToken
                    }
        }).then(function (result) {
            userInfo = null;
            $window.sessionStorage["userInfo"] = null;
            deferred.resolve(result);
        }, function (error) {
            console.log("Error is also at factory");
            deferred.reject(error);
        });

        return deferred.promise;
    }

    function getUserInfo() 
        {
            return userInfo;
        }

    function init() 
        {
            if ($window.sessionStorage["userInfo"]) 
            {
                console.log("init function executes");
                userInfo = JSON.parse($window.sessionStorage["userInfo"]);
                console.log("init function userInfo"+ userInfo);
            }
        }
    init();

    return  {
            login : login,
            getUserInfo: getUserInfo
            };
}]);
//authenticationSvc factory Ends Here

//Signin Controllers
app.controller('signinCtrl',function($scope,$location,$rootScope,$window,authenticationSvc)
{   
    $scope.login = function () 
    {
        authenticationSvc.login($scope.uName,$scope.uPwd)
        .then(function (result) 
        {
          if (result.resToken != null)
            {
                $rootScope.loggedIn = true;
                // $scope.userInfo = result;
                 $rootScope.user = result.resfName +" " + result.reslName;
                $location.path('/home');
            }else if (result.resToken == null) 
                 {
                    $scope.errortxt = result.resErr + " " + result.resuName; 
                  }
        },function(reason){
                console.log(reason);
        },function(error){
                 console.log(error);
        });
};

当我在一些论坛中搜索时,他们将其存储在本地存储中,但我不清楚存储它。可以请任何人帮忙出去。

【问题讨论】:

    标签: angularjs node.js json-web-token


    【解决方案1】:

    你可以使用ngStorage

    你必须将它注入你的工厂并像这样使用它:

    app.factory('authenticationSvc', ["$http","$q","$window","$location","$rootScope", "$localStorage", function($http,$q,$window,$location,$rootScope, $localStorage){
        $localStorage.set('jwt', yourjwt);
        $localStorage.get('jwt');
    }])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多