我正在尝试从用户的数据库中获取用户信息,并使用rootscope从任何地方访问它。
当用户登录时,我会收到用户的电子邮件和uid。
但是,要获取用户的信息数据库,我需要调用我的数据库并逐个读取信息并将其作为变量存储在rootscope中,以便从任何地方访问它。
所以,我的问题如下:
感谢您的帮助。
app.run(['$rootScope', '$state', '$stateParams', '$cookies', "$location",
function ($rootScope, $state, $stateParams, $cookies, $location) {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
$rootScope.user.uid = user.uid;
$rootScope.user.email = user.email;
return firebase.database().ref('/users/' + user.uid).once('value').then(function(snapshot) {
var firstname = snapshot.val().firstname;
console.log("first name", firstname);
});
} else {
// No user is signed in.
}
});
}]);
答案 0 :(得分:1)
有两种方法可以满足您的需求
方法1:
您可以执行此操作$rootScope.authData=user;
然后通过注入$rootScope
从任意位置访问它。但问题在于,当您刷新页面时$rootScope
将为空检查此SO Question
方法2:
我更喜欢这种方法,您可以使用$getAuth()
的{{1}}函数,angularfire
是同步函数,它将为您提供当前用户数据。
$getAuth
答案 1 :(得分:1)
如果您使用AngularFire 始终使用其包装方法与本机firebase方法。
不要使用
firebase.auth().onAuthStateChanged
firebase.database().ref('/users/' + user.uid).once('value')
使用
$firebaseAuth().$onAuthStateChanged
var userData = $firebaseObject(firebase.database().ref('/users/' + user.uid));
在angularFire中查看以下链接,查看可用方法的完整列表。 https://github.com/firebase/angularfire/blob/master/docs/reference.md
我建议像这样修改你的代码。
$firebaseAuth().$onAuthStateChanged(function(user) {
if (user) {
$rootScope.user = $firebaseObject(firebase.database().ref('/users/' + user.uid));
$rootScope.user.uid = user.uid;
$rootScope.user.email = user.email;
console.log("Here you should have complete user object");
// still if you want to do something when user is loaded
/* $rootScope.user.$loaded(function(loadedUser) {
var firstname = loadedUser.firstname;
console.log("first name", firstname);
});*/
} else {
// No user is signed in.
}
});
当然,您需要使用依赖注入包含$firebaseObject
和$firebaseAuth
。