【问题标题】:Initialize Current User Service on Application Start in AngularJS在 AngularJS 中的应用程序启动时初始化当前用户服务
【发布时间】:2016-12-13 01:41:42
【问题描述】:

我正在使用 AngularJS 开发单页应用程序。

当用户成功登录时,安全令牌会存储在 cookie 中。现在,当他刷新页面时,令牌将被发送到后端,后端返回一个 JSON 对象“currentUser”,其中包含有关当前用户的所有相关信息(如姓名、访问组、个人资料图片等)。

问题是,这当然是一个异步过程,所以当控制器开始另一个操作时,比如说,只是提醒用户名,此时这个值将是未定义的。

当然,我可以设置超时,但有更好的解决方案吗?

我想到了一个“currentUserService”,它先初始化(发送cookie并用后端响应填充用户信息),只有在这个初始化完成后才能处理。

但是如何做到这一点呢?或者还有其他可能吗?


编辑: 嗨,大家好, 感谢您的意见!

总体而言,您的两个建议似乎都非常适合异步请求,但我认为它们可能不完全符合我的担忧:

当前用户的信息只需要请求一次,所以我想存储它们用于整个应用程序(例如在 rootScope 或服务中)可以从任何控制器访问,而不必在每个控制器中再次请求它们(如在回调或解析解决方案中),但要确保不会出现任何“超时”问题。你有什么想法吗?

【问题讨论】:

    标签: javascript angularjs authentication cookies service


    【解决方案1】:

    如果用户刷新,您必须初始化所有内容。我假设令牌存储在本地存储或其他东西中,我假设这是角度 1.*。为此,我认为您应该从您的 http call-callback 中调用与用户相关的函数:

      $scope.user = {};
    
      $scope.getUser = function(){
        $http({
           method: 'GET',
           url: '/someUrl'
        }).then(function (res) {
    
          $scope.user = res.data; //or whatever the response is
          $scope.handleUserRelatedThings();
    
        }).catch(function(err) {
    
          //handle error
    
        })
    
      }
    
      $scope.handleUserRelatedThings = function(){
    
       //do things with $scope.user
       alert($scope.user.name);
    
      }
    
      //on init
      $scope.getUser();
    

    【讨论】:

      【解决方案2】:

      您可以使用ng-routeui-router 在视图加载之前解析用户数据:

      这个例子是为ui-router写的:

      .state('profile', {
       url: '/profile',
       controller: 'profileCtrl as vm',
       resolve: {
        user: function(AuthService) {
         //Return a promise or an object to be resolved.
         return AuthService.getUserFromToken(); //Say this is asynchronous and returns a promise
        }
       }
      });
      
      //In controller:
      .controller('profileCtrl', function(... , user) {
       //User data available here
       this.user = user;
      });
      

      请注意,如果在解决阶段出现任何错误,则不会加载状态,因此您必须处理错误!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        • 2011-08-16
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        相关资源
        最近更新 更多