我正在为我的登录系统使用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;
});
};
答案 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()
}
});