TypeError: undefined não é uma função do Firebase e do AngularJS (Tutorial 7 do ThinksterIO)

Atualizar

O tutorial foi atualizado e a pergunta está desatualizada

Eu já tive vários problemas com o Tutorial do Thinkster.io AngularJS: Aprenda a criar aplicativos da Web modernosCapítulo 7. Criando seus Próprios Dados do Usuário Utilizando Firebase.

O primeiro teve a ver com salvar um novo usuário no Firebase Forge, que felizmente foi resolvido por Anna Smother em seu post de SOAngularJS tutorial Thinkster.io capítulo 7 mas agora estou recebendo dois TypeErrors após registrar um novo usuário. Vou explicar o que acontece quando registro um novo usuário:

Eu preencho o formulário de registroEu clico em RegisterVejo meu novo objeto de usuário conectado ao consoleFico logado2 TypeError: undefined is not a function erros aparecem no console

1st TypeError: indefinido não é uma função

Então, olhando para o primeiro erro, vemos 3 lugares sendo apontados no meuuser.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

O primeiro lugar no meu código que o primeiro erro aponta é a linha 37, coluna 18, que é o começo de $ childin theFunção findByUsername`

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

A partir daí, aponta para a linha 8, coluna 33, que é o início dafindByUsername chamada de método

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

E, por fim, aponta para a linha 32, coluna 5, que é o início dosetCurrentUser chamada de método

  users.$save().then(function() {
    setCurrentUser(username);
  });
2nd TypeError: indefinido não é uma função

O segundo TypeError aponta para apenas um lugar nouser.js

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

que é a linha 14, coluna 9, no início do$on chamada de método

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

Alguma idéia de por que estou recebendo esses dois TypeErrors?

ARQUIVOS

user.js serviço

'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();
      });
    };
  });

questionAnswers(1)

yourAnswerToTheQuestion