Can't get Firebase reference to ID to define c

2019-09-13 19:07发布

I think I am getting my keys, arrays, values and IDs mixed up here but can't seem to figure it out.

I want a way to get the current user in a ProfileCtrl controller. This is my current implementation using promises, $waitForAuth and once. But I am not sure if implementing currently.

var user = "";
var key = "";
var uids = Users.allUIDs();
console.log(uids);

Auth.$waitForAuth().then(function () {
     var uid = Auth.$getAuth().uid;
     console.log(uid);
     for (var i = 0; i < uids.length; i++) {
         console.log(uids[i].value().toString());
         if (uids[i].value() == uid) {
             var userKeyRef = new Firebase(firebaseUrl + uids + uids[i]);
             userKeyRef.once('value').then(function(snapshot) {
                 key = snapshot.val();
             }).then(function(){
                 user = new Firebase(firebaseUrl + users).child(key).val();
             });

             console.log(user);
             console.log('User exists')
             break;
         }
     }
     $scope.user =user;
 }).catch(function (error) {
     console.log(error);
 })

I do a check of the uids in an array, and if they match the authenticated user, I get the key from within the uids array and use that key to find the user object in the users array. Here is my database:

{
  "uids" : {
    "7d34fb85-813c-4586-857e-f062aed67f32" : {
      "-KDQDk5vwJXmFngwI7iQ" : {
        "registered" : true
      }
    }
  },
  "users" : {
    "-KDQDk5vwJXmFngwI7iQ" : {
      "email" : "random@gmail.com",
      "firstname" : "Random",
      "lastname" : "Person",
      "uid" : "7d34fb85-813c-4586-857e-f062aed67f32"
    }
  }
}

For a clearer example, when I console.log the uids as it is returned from my service, it looks like:

enter image description here

Which means the uids are coming through?

Here is my code to get the uids:

app.factory('Users', ['$firebaseArray','$firebaseObject', 'Auth', function ($firebaseArray, $firebaseObject, Auth) {

    var ref = new Firebase("https://urlformyapp.firebaseio.com");
    var users = $firebaseArray(ref.child('users'));
    var uids = $firebaseArray(ref.child('uids'));

    return {
        all: function () {
            return users;
        },
        allUIDs: function () {
            return uids;
        },
        get: function (id) {
            // Simple index lookup
            return users[id];
        }
    }

}])

Could someone tell me what is going wrong? Why does uids[i].value.toString() not print anything? Is there anything wrong with my code logic given the structure of my DB?

0条回答
登录 后发表回答