Angularfire当前记录在用户的数据中

时间:2015-11-11 09:46:52

标签: angularjs

我正在为我的登录系统使用Angularfire,并尝试获取当前登录用户的用户名,以便在控制器中使用。从uid获取$getAuth并将其与数据库中的数据同步。但我在下面尝试的是不起作用。

.factory("Auth", function($firebaseAuth) {
var ref = new Firebase("URL");
return $firebaseAuth(ref);
})

.factory("Konusma", function($firebaseObject) { //When you give user's uid to this factory its gives you user data in database.
return function(xm) {
        var ref = new Firebase("URL");
        var userdata = ref.child('users').child(xm);
        return $firebaseObject(userdata);
}})

.controller("chatCtrl", function(Auth, Konusma) {

var userx = Auth.$getAuth(); //Current logged in user's uid and email

var chatci = function() { //Trying to get current logged in user's username and other data according to uid which is comes from Auth.$getAuth.

        Konusma(userx.uid).$loaded().then(function(data){
        return data.username;
    });

};

enter image description here

1 个答案:

答案 0 :(得分:0)

如评论中所述 -

您正在尝试在用户通过身份验证之前获取数据。

所以在你的控制器中,而不是:

 var userx = Auth.$getAuth();

你可以用这个:

var userx = {};
Auth.$onAuth(function(authData) {
  var userx = authData;
  // or bind to scope - 
  // $scope.authData = authData;
});

每次更改身份验证状态时,这也会更新您的authData变量。

无论如何 - 你仍然需要在用户登录后调用:currentUser = chatci(), 而不是让人知道改变的时间。

最好的方法是将它与路由器一起使用,请参见此处:https://www.firebase.com/docs/web/libraries/angular/guide/user-auth.html#section-routers

因此只有在auth成功后才会加载控制器。

但是对于您的示例 - 您可以将其添加到您的控制器:

Auth.$waitForAuth().then(function(authData){
   if (authData){
        currentUser = chatci()
   }
});