0

我希望在不同的 Angular 控制器之间维护用户状态。我正在使用 JWT 进行身份验证,并且可以使用它从每个控制器上的服务器安全地返回用户属性,但每次我进行控制器切换时这是一个完整的循环。

所以我在我的 UserFactory 中添加了以下方法:

function getLocalUser() {
  var localUser = {};
  return {
     isSet:isSet,
     get:get,
     set:set
  };
  function isSet(){
      return (Object.keys(localUser).length > 0)
  };
  function get() {
     return localUser
  };
  function set(U){
     Object.keys(U).forEach(function (c,i,a){
     localUser[c] = U[c];
   })
 }
}

UserController 这样登录:

function login(username, password) {
  UserFactory.login( username, password).then(function success(response) {
    $scope.vm.loggedInUser = response.data.user;
    $scope.vm.username  = null;
    $scope.vm.password  = null;
    UserFactory.getLocalUser().set($scope.vm.loggedInUser);
  },handleError);
}   

这显然有效,但是当我移动到下一个控制器时:

    $scope.vm = {};
    // initialize
    if (UserFactory.getLocalUser().isSet) {
      $scope.vm.loggedInUser = UserFactory.getLocalUser().get();
    } else {
      UserFactory.getUser().then(function success(response) {
        $scope.vm.loggedInUser = response.data;
      });
    }

呼吁

UserFactory.getLocalUser().isSet

再次初始化 var localUser = {},当然它是空的。

我是一个想要在这里的人,所以要善良

提前致谢

4

1 回答 1

0

没有测试过。但看起来您正在创建从 userFactory 到 userController 的引用。因此,当 userController 被销毁时,引用将指向任何内容。

您需要创建对象的副本https://docs.angularjs.org/api/ng/function/angular.copy

更好的解决方案是将您的登录功能移至 userFactory。当 userFactory 将保存数据而不是 userCONtroller

于 2015-10-06T15:13:38.737 回答