Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何获取经过身份验证的用户信息并在所有控制器和服务中使用?_Angularjs_Firebase_Angularfire - Fatal编程技术网

Angularjs 如何获取经过身份验证的用户信息并在所有控制器和服务中使用?

Angularjs 如何获取经过身份验证的用户信息并在所有控制器和服务中使用?,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我正在使用angularFireAuth,我想检索登录用户的信息并在中使用 应用程序初始化时的所有控制器或服务 目前,我在每个控制器中都使用了这个,但我遇到了一些问题 $scope.$on("angularFireAuth:login", function(evt, user){ console.log(user); }); 如果不是整页加载,回调将不会调用,或者在应用程序初始化时返回null 我需要一些技巧,我如何才能返回经过身份验证的用户的信息,以便我可以使用时,应用程序是初始的,在

我正在使用angularFireAuth,我想检索登录用户的信息并在中使用 应用程序初始化时的所有控制器或服务

目前,我在每个控制器中都使用了这个,但我遇到了一些问题

$scope.$on("angularFireAuth:login", function(evt, user){ 
  console.log(user);
});
如果不是整页加载,回调将不会调用,或者在应用程序初始化时返回null

我需要一些技巧,我如何才能返回经过身份验证的用户的信息,以便我可以使用时,应用程序是初始的,在所有的控制器和服务

范例

在控制器或服务中时

  • $scope.auth.user.id
    将返回用户的id
  • $scope.auth.user.name
    将返回用户名

    • 我不太清楚你的问题是什么。但是,如果您希望授权一次,而不是在每个控制器中,那么您可以将代码放入模块中,然后将其放入$rootScope

      var myapp = angular.module('myapp').run(
          function ($rootScope) {
              $rootScope.user = null;
      
              $rootScope.$on("angularFireAuth:login", function (evt, user) {
                  $rootScope.user = user;
      
              });
          });
      

      我将从一个
      userService
      开始:

      angular.module('EventBaseApp').service('userService', function userService() {
          return {
              isLogged: false,
              username: null
          }
      
      });
      
      并编写一个
      LoginCtrl
      控制器:

      angular.module('EventBaseApp')
        .controller('LoginCtrl', function ($scope, userService, angularFireAuth) {
          var url = "https://example.firebaseio.com";
          angularFireAuth.initialize(url, {scope: $scope, name: "user"});
      
          $scope.login = function() {
              angularFireAuth.login("github");
      
          };
          $scope.logout = function() {
              angularFireAuth.logout();
          };
      
          $scope.$on("angularFireAuth:login", function(evt, user) {
            userService.username = $scope.user;
            userService.isLogged = true;
          });
      
          $scope.$on("angularFireAuth:logout", function(evt) {
            userService.isLogged = false;
            userService.username = null;
          });
      });
      
      userService
      插入用户所需的任何位置

      我当前正在使用的应用程序使用此-


      根据这里介绍的想法-

      我将其投入服务。然后在.run()中运行它,并在控制器中调用$scope.user。它总是返回null,根本不监听。我提出了另一个问题。您必须显示您的代码。你是在把用户服务注入你的控制器吗?我刚才看了你的另一个问题。你在正确的道路上。authservice只需要在需要的地方注入控制器或服务。因为它是单例,所以只会登录一次。@Anton仍然不工作。这是plunker请检查,谢谢plunker给出了404未发现错误。url正确吗?