使用ng-token-auth检索身份验证状态和当前用户

时间:2015-11-09 19:23:08

标签: angularjs authentication

我在AngularJS应用程序中使用ng-token-authdevise_token_auth。我已成功实施登录和注销,但我无法执行以下操作:

  1. 确定用户是否经过身份验证,
  2. 检索当前用户的信息。
  3. 我通过使用活动订阅者部分解决了问题:

    myApp.run(['$rootScope',
      ($rootScope)->
        $rootScope.isAuthenticated = false
    
        $rootScope.$on('auth:validation-success', (e)->
          $rootScope.isAuthenticated = true
        )
        $rootScope.$on('auth:login-success', (e)->
          $rootScope.isAuthenticated = true
        )
    
        $rootScope.$on('auth:validation-error', (e)->
          $rootScope.isAuthenticated = false
        )
        $rootScope.$on('auth:invalid', (e)->
          $rootScope.isAuthenticated = false
        )
        $rootScope.$on('auth:login-error', (e)->
          $rootScope.isAuthenticated = false
        )
        $rootScope.$on('auth:logout-success', (e)->
          $rootScope.isAuthenticated = false
        )
        $rootScope.$on('auth:account-destroy-success', (e)->
          $rootScope.isAuthenticated = false
        )
        $rootScope.$on('auth:session-expired', (e)->
          $rootScope.isAuthenticated = false
        )
    ])
    

    但是,我不确定这是最好的方法。也许我应该这样做 服务呢?

    关于2,我已经安装了angular-resource并配置了User资源,但我不确定在哪里检索用户信息(服务?控制器?)以及如何更新它当用户更新他们的个人资料时(我应该只是听事件订阅者还是只是重新加载每个状态变化的信息?)。

    我对Angular很新,所以如果我做错了什么,请告诉我。

1 个答案:

答案 0 :(得分:2)

我强烈建议您创建一种UserService,它将包含您的所有身份验证和用户数据,以及您对用户的所有逻辑功能,以及使用User资源进行获取,创建,更新,删除,验证,注销等... 你应该真的避免在这里使用$ rootScope,这不是它的意思,你真的不需要在$ rootScope上放置数据。

所以在UserService中,我建议你保存用户的信息,

function UserService(User) {
    var _user = null;

    this.getUserFromServer = function(userid) {
         User.get(userId).$promise.then(user) { _user = user;  };
    }

    this.isAuthenticated = fucntion (){ 
        return user !== null;          
    } 

    this.logoff = fucntion (){ 
        user = null;          
    } 
}

所以这样我解决了你遇到的两个问题, 使用您创建的事件侦听器来触发上述函数。

祝你好运。