firebase当前用户ID

时间:2016-08-05 05:53:40

标签: angularjs firebase firebase-realtime-database angularfire firebase-authentication

我从工厂/服务中检索当前用户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/

2 个答案:

答案 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);
  }
});

请参阅documentation on getting the currently signed in user

答案 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);