TypeError: undefined no es una función con Firebase y AngularJS (Tutorial de ThinksterIO Capítulo 7)

Actualizar

El tutorial ha sido actualizado y la pregunta ahora está desactualizada.

Me he encontrado con varios problemas con el tutorial Thinkster.io AngularJS: Aprenda a construir aplicaciones web modernasCapítulo 7. Creando sus propios datos de usuario usando firebase.

El primero tuvo que ver con salvar a un nuevo usuario en Firebase Forge, que afortunadamente fue resuelto por Anna Smother en su publicación SOAngularJS tutorial Thinkster.io capítulo 7 pero ahora obtengo dos TypeErrors después de registrar un nuevo usuario. Explicaré lo que sucede cuando registro un nuevo usuario:

Completo el formulario de registroHago clic en RegistrarseVeo mi nuevo objeto de usuario registrado en la consolaMe conecto2 TypeError: undefined is not a function aparecen errores en la consola

1st TypeError: indefinido no es una función

Entonces, mirando el primer error, vemos que se señalan 3 lugares en miuser.js

TypeError: undefined is not a function
    at Object.User.findByUsername (http://localhost:9000/scripts/services/user.js:37:18)
    at setCurrentUser (http://localhost:9000/scripts/services/user.js:8:33)
    at http://localhost:9000/scripts/services/user.js:32:5

El primer lugar en mi código al que apunta el primer error es la línea 37, columna 18, que es el comienzo de $ childin thefunción findByUsername`

findByUsername: function (username) {
  if (username) {
    return users.$child(username);
  }
},

Desde allí apunta a la línea 8, columna 33, que es el comienzo de lafindByUsername llamada al método

function setCurrentUser(username) {
  $rootScope.currentUser = User.findByUsername(username);
}

Y, por último, apunta a la línea 32, columna 5, que es el comienzo de lasetCurrentUser llamada al método

  users.$save().then(function() {
    setCurrentUser(username);
  });
2nd TypeError: indefinido no es una función

El segundo TypeError apunta a un solo lugar enuser.js

TypeError: undefined is not a function
    at http://localhost:9000/scripts/services/user.js:14:9

que es la línea 14, columna 9 al comienzo de la$on llamada al método

query.$on('loaded', function () {
  setCurrentUser(query.$getIndex()[0]);
});

¿Alguna idea de por qué recibo estos dos TypeErrors?

Archivos

user.js Servicio

'use strict';

app.factory('User', function ($firebase, FIREBASE_URL, $rootScope) {
  var ref = new Firebase(FIREBASE_URL + 'users');
  var users = $firebase(ref).$asObject();

  function setCurrentUser(username) {
    $rootScope.currentUser = User.findByUsername(username);
  }

  $rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {
    var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid));

    query.$on('loaded', function () {
      setCurrentUser(query.$getIndex()[0]);
    });
  });

  $rootScope.$on('$firebaseSimpleLogin:logout', function() {
    delete $rootScope.currentUser;
  });

  var User = {
    create: function (authUser, username) {
      users[username] = {
        /*jshint camelcase: false */
        md5_hash: authUser.md5_hash,
        username: username,
        $priority: authUser.uid
      };
      users.$save().then(function() {
        setCurrentUser(username);
      });
    },
    findByUsername: function (username) {
      if (username) {
        return users.$child(username);
      }
    },
    getCurrent: function () {
      return $rootScope.currentUser;
    },
    signedIn: function () {
      return $rootScope.currentUser !== undefined;
    }
  };

  return User;
});

auth.js controlador

'use strict';

app.controller('AuthCtrl',
  function ($scope, $location, Auth, User) {
    if (Auth.signedIn()) {
      $location.path('/');
    }

    $scope.$on('firebaseSimpleLogin:login', function() {
      $location.path('/');
    });

    $scope.login = function() {
      Auth.login($scope.user).then(function() {
        $location.path('/');
      }, function(error) {
        $scope.error = error.toString();
      });
    };

    $scope.register = function () {
      Auth.register($scope.user).then(function (authUser) {
        User.create(authUser, $scope.user.username);
        $location.path('/');
        Auth.login($scope.user);
        console.log(authUser);
      }, function(error) {
        $scope.error = error.toString();
      });
    };
  });

Respuestas a la pregunta(1)

Su respuesta a la pregunta