首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AngularFire中,为什么auth.user属性在控制器中为空,而不是在视图中?

在AngularFire中,为什么auth.user属性在控制器中为空,而不是在视图中?
EN

Stack Overflow用户
提问于 2014-05-06 01:05:51
回答 2查看 2K关注 0票数 2

有一个用户登录到Firebase,在我的视图中,$scope.auth返回当前登录的用户,我可以访问它的数据。

然而,在我的控制器中,$scope.auth.user返回null。

代码语言:javascript
复制
myApp.controller('quoteController', ['$scope', '$firebase', '$firebaseSimpleLogin',
  function($scope, $firebase, $firebaseSimpleLogin) {

    $scope.auth = $firebaseSimpleLogin(dataRef);

    console.log($scope.auth.user);
  });

console.log($scope.auth.user) == 'null‘。

为什么是这种情况?我知道用户已经登录了。angularFire文档说,“对于应用程序来说,简单登录的登录状态是全局的,即使创建了多个$firebaseSimpleLogin对象。”那么$scope.auth.user不应该包含当前用户吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-06 18:35:17

登录需要异步与服务器联系。您不能立即访问下一行中的变量,因为它尚未被检索。此外,您还需要在用户对象存在之前调用login()。假设有一个从另一个页面视图中持久化的登录,或者已经调用了login(),那么您可以采取一些方法来实现您想要的结果。

使用$getCurrentUser()等待解析和获取当前已验证的用户帐户的auth进程:

代码语言:javascript
复制
angular.module("sampleApp", ["firebase"])
  .controller("SampleController", ["$scope", "$firebase", "$firebaseSimpleLogin",
    function($scope, $firebase, $firebaseSimpleLogin) {
      var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
      $scope.auth = $firebaseSimpleLogin(ref);
      $scope.auth.$getCurrentUser().then(function(user) {
         console.log(user);
      });
    }
  ]);

利用八月事件

代码语言:javascript
复制
angular.module("sampleApp", ["firebase"])
  .controller("SampleController", ["$scope", "$firebase", "$firebaseSimpleLogin",
    function($scope, $firebase, $firebaseSimpleLogin) {
      var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
      $scope.auth = $firebaseSimpleLogin(ref);
      $scope.$on('$firebaseSimpleLogin:login', function() {
         console.log($scope.auth.user);
      });
    }
  ]);

也可以使用调用登录时返回的承诺:

代码语言:javascript
复制
angular.module("sampleApp", ["firebase"])
  .controller("SampleController", ["$scope", "$firebase", "$firebaseSimpleLogin",
    function($scope, $firebase, $firebaseSimpleLogin) {
      var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
      $scope.auth = $firebaseSimpleLogin(ref);

      $scope.auth.$login('twitter').then(function() {
          console.log($scope.auth.user);
      });
    }
  ]);
票数 7
EN

Stack Overflow用户

发布于 2014-05-06 04:07:29

这很可能是由于调用firebaseSimpleLogin的异步性质所致。即使是他们的例子也有回调。

代码语言:javascript
复制
var auth = new FirebaseSimpleLogin(chatRef, function(error, user) {
  if (error) {
    // an error occurred while attempting login
    console.log(error);
  } else if (user) {
    // user authenticated with Firebase
    console.log('User ID: ' + user.uid + ', Provider: ' + user.provider);
  } else {
    // user is logged out
  }
});

如果您检查回调中的值,您应该会看到用户数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23484381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档