【问题标题】:Retrieving authentication status and current user with ng-token-auth使用 ng-token-auth 检索身份验证状态和当前用户
【发布时间】:2015-11-09 19:23:07
【问题描述】:

我在我的 AngularJS 应用程序中使用 ng-token-authdevise_token_auth。我已成功实现登录和注销,但在执行以下操作时遇到问题:

  1. 确定用户是否经过身份验证,以及
  2. 正在检索当前用户的信息。

我已经通过使用事件订阅者部分解决了 1:

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 的新手,所以如果我做错了什么,请告诉我。

【问题讨论】:

    标签: angularjs authentication


    【解决方案1】:

    我强烈建议您创建某种 UserService,它将保存您的所有身份验证和用户数据,以及您拥有的有关用户的所有逻辑功能,以及使用用户资源,用于获取、创建、更新、删除、验证、注销等... 你真的应该避免在这里使用 $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;          
        } 
    }
    

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

    祝你好运。

    【讨论】:

    • 如何从模板访问这些数据?
    • 向UserService添加一个新函数——this.getUser = function () { return _user };这个函数可以在你的任何控制器中使用,你可以将它附加到 $scope 并在模板中使用它
    • 好的,如何从服务内部订阅事件?
    • 你的意思是设计事件?您不必在服务中订阅它们,您可以将它们保留在运行功能中的位置,我什至建议您将其保留在那里,如果您必须这样做,您可以将 $rootScope 添加到 UserService 的注射剂并订阅那里的事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2017-12-05
    • 2016-04-07
    • 2021-12-29
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多