Ошибка типа: undefined не является функцией с Firebase и AngularJS (учебное пособие ThinksterIO, глава 7)

Обновить

Учебник обновлен, и вопрос устарел

Я столкнулся с множеством проблем, связанных с Thinkster.io AngularJS Tutorial: научиться создавать современные веб-приложенияГлава 7. Создание собственных пользовательских данных с использованием Firebase.

Первое было связано с сохранением нового пользователя в Firebase Forge, что, к счастью, было решено Анной Смотер в ее SO сообщенииAngularJS учебник Thinkster.io глава 7 но теперь я получаю два TypeErrors после регистрации нового пользователя. Я объясню, что происходит, когда я регистрирую нового пользователя:

Я заполняю регистрационную формуЯ нажимаю РегистрацияЯ вижу, что мой новый объект пользователя зарегистрирован в консолиЯ залогинен2 TypeError: undefined is not a function ошибки появляются в консоли

1-я ошибка типа: undefined не является функцией

Итак, глядя на первую ошибку, мы видим 3 места, на которые указывают моиuser.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

Первое место в моем коде, на которое указывает первая ошибка, это строка 37, столбец 18, который является началом $ childin theфункция findByUsername`

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

Оттуда он указывает на строку 8, столбец 33, который является началомfindByUsername вызов метода

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

И, наконец, он указывает на строку 32, столбец 5, который является началомsetCurrentUser вызов метода

  users.$save().then(function() {
    setCurrentUser(username);
  });
2-я ошибка типа: undefined не является функцией

Вторая ошибка TypeError указывает только на одно место вuser.js

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

это строка 14, столбец 9 в начале$on вызов метода

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

Любые идеи о том, почему я получаю эти два TypeErrors?

FILES

user.js оказание услуг

'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 контроллер

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

Ответы на вопрос(1)

Ваш ответ на вопрос