IgnorantUser
IgnorantUser

Reputation: 307

firebase/angularFire querying with startAt/endAt doesn't work

I have an app where I use FirebaseSimpleLogin, but since I have additional user data, I store it under [my-firebase].firebaseio.com/users/[username]. The snippet below shows how it's done

 var User = {
    create: function (authUser, username) {

      users[username] = {
        md5_hash: authUser.md5_hash,
        username: username,
        email: authUser.email,
       $priority: authUser.uid
      };

      users.$save(username).then(function () {
        setCurrentUser(username);
      });

    },
    ...

Since data for each individual user, are keyed based on username I prioritize by uid, so I can later fetch additional user data by uid.

When the firebase login event fires, I have the following handler, that is responsible for querying firebase to get the additionala user data, and store it on $rootScope.currentUser via a method setCurrentUser(username) Here is my login event handler:

var ref = new Firebase(FIREBASE_URL + '/users');
var users = $firebase(ref);

$rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {

      var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid));

      query.$on('loaded', function () {
  //PROBLEM: console.log(query.$getIndex()) logs an empty array 
        setCurrentUser(query.$getIndex()[0]);
      });
});

As soon as the login event fires, I get access to the authUser, which contains the uid of the logged in user. Then I query firebase /users by uid, using startAt/endAt to limit my results so that I'm left only with the currently logged in user.

Then, when the query data is loaded from firebase, I invoke the setCurrentUser method which stores the username of the currentUser on $rootScope.

The Problem The query filtering using startAt/endAt does not work, I'm getting back an empty array when I console.log query.$getIndex() when I should be getting an array with the username of the currently logged-in user.

I'm using firebase 1.0.15, angularFire 0.7.1 and firebase-simple-login 1.4.1 and following this tutorial from Thinkster.io

Upvotes: 0

Views: 727

Answers (1)

IgnorantUser
IgnorantUser

Reputation: 307

In the end somewhere in my code I had a $save() on my user binding, to save the id of the last project they've been working on, and this was causing the $priority issue. I used $update instead, and now everything works like a charm!

Still I don't know if this is intended behavior of $save() To clarify and provide more context, I wasn't passing any keys to the $save() method, I simply added a property on my local user reference, and saved it

$rootScope.currentUser.lastWorkingProject = projectId;
$rootScope.currentUser.$save();

Upvotes: 0

Related Questions