我从工厂/服务中检索当前用户ID时出错。删除此firebase.auth().currentUser.uid
似乎有效。
我错过了什么?是否可以从工厂获取用户ID?
.factory("dataFire", ["$firebaseArray", "$firebaseAuth", "$firebaseObject", function($firebaseArray, $firebaseAuth, $firebaseObject){
var ref = firebase.database().ref("users/" + firebase.auth().currentUser.uid);
var user = $firebaseObject(ref);
return {
user: user
} }])
jsfiddle链接 https://jsfiddle.net/ken19net/m8qkdrpu/37/
答案 0 :(得分:0)
将侦听器附加到数据库的代码在用户登录之前运行。由于此时没有当前用户firebase.auth().currentUser.uid
将抛出以下错误:
VM603 angular.min.js:118 TypeError:无法读取属性' uid'为null
在将来的问题中,请包含错误消息,因为它会在一段时间内保存我们。
解决方案是在用户通过身份验证后附加侦听器:
app.controller("appCtrl", function($scope, $firebaseAuth, myService) {
$scope.signIn = function() {
$firebaseAuth().$signInAnonymously().then(function(user) {
var ref = firebase.database().ref("test/" + firebase.auth().currentUser.uid);
});
};
});
请注意,每次用户加载页面时,运行上述代码都会创建一个新的匿名用户帐户。如果那不是您想要的,请使用身份验证状态监听器:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
var ref = firebase.database().ref("test/" + firebase.auth().currentUser.uid);
}
});
答案 1 :(得分:0)
我可能有类似的问题。这可能有所帮助。
if (firebase.auth().currentUser !== null) {
console.log("user id: " + firebase.auth().currentUser.uid);
var ref = firebase.database().ref().child("users/" + firebase.auth().currentUser.uid);
var syncUserObject = $firebaseObject(ref);
syncUserObject.$bindTo($scope, "data");
} else {
console.log("No user currently logged in");
}
如果所有其他方法都失败,则只需JSON.stringify(Object,null,2);