CreateUser 函数根本不是 运行

CreateUser function not running at all

我正在尝试在 Firebase 中实现用户创建,但出于某种原因完全跳过了执行此操作的功能。我以前做过一千次,但现在我无法弄清楚为什么这个函数根本不是 运行,这让我发疯所以希望有人能指出我在这里做错了什么。

我有一个连接到表单的按钮,当您单击此按钮时,它会调用一个 validate 函数:

<button ng-click="validate()">Submit</button>

$scope.validate = function() {
    $scope.error = validation.validateSignup($scope.user);
    $scope.error ? false : $scope.error = dbEntry.createNewUser($scope.user);
}

它将调用工厂方法,如果没有返回错误,它将调用 dbEntry 工厂的 createNewUser 方法。

指向引用、同步引用或身份验证对象的工厂。后者是我用来创建新用户的。请参阅此 here.

的文档
forumApp.factory('fbRef', ['$firebase', '$firebaseAuth', function($firebase, $firebaseAuth) {

    return {
        getReference: function(path) {
            return path ? new Firebase('https://blabla.firebaseio.com/' + path) : new Firebase('https://forum-app.firebaseio.com/');  
        },
        getSyncedReference: function(path) {
            return $firebase(new Firebase('https://blabla.firebaseio.com/' + path));
        },
        getAuthObj: function() {
            return $firebaseAuth(new Firebase('https://blabla.firebaseio.com/'));
        }
    };
}]);

示例 user 传递给 createNewUser 方法的对象:

$scope.user = {
    firstname: 'Chris',
    lastname: 'Ferguson',
    age: '21',
    country: 'Sweden',
    displayName: 'BadBoy13',
    email: 'badboy13@gmail.com',
    password: 'mothercow',
    confirmedPassword: 'mothercow',
    isTermsAccepted: true
}

包含将在 Firebase 数据库中注册新帐户的 createNewUser 方法的工厂。

UPDATED FACTORY - 它现在 运行s 但当我尝试将任何内容插入数据库时​​,我在 switch 语句中一直得到默认值 "Connection error- try again later":

forumApp.factory('dbEntry', ['$firebase', '$firebaseAuth', 'fbRef', function($firebase, $firebaseAuth, fbRef) {
    return {
        /**
         * Create a new user account in Firebase
         *
         * @param Object $user
         *  User details
         *
         * @return String
         *  If error -> error message
         *  If successful -> success message
         */
        createNewUser: function(user) {

            return fbRef.getAuthObj().$createUser({
                email: user.email,
                password: user.password
            }).then(function(userData) {
                console.log(userData);
                return 'Registration successful';
            }).catch(function(error) {

                switch (error.code) {

                    case 'EMAIL_TAKEN': 
                        return 'Email already registered';

                    default: 
                        return 'Connection error - try again later';
                }
            });
        }
    };
}]);

有人能指出这里有什么问题吗?

createNewUser dbEntry 工厂的方法是 return 承诺,但在你的中你没有 return 承诺。 fbRef.getAuthObj().$createUser({}) 方法应该 return 来自工厂。

代码

forumApp.factory('dbEntry', ['$firebase', '$firebaseAuth', 'fbRef', function($firebase, $firebaseAuth, fbRef) {
    return {
        createNewUser: function(user) {
            //returning promise that will return to method who is accessing it.
            return fbRef.getAuthObj().$createUser({
                email: user.email,
                password: user.password
            }).then(function(userData) {
                console.log(userData);
                return 'Registration successful';
            }).catch(function(error) {

                switch (error.code) {

                    case 'EMAIL_TAKEN': 
                        return 'Email already registered';

                    default: 
                        return 'Connection error - try again later';
                }
            });
        }
    };
}]);

控制器

$scope.validate = function() {
    $scope.error = validation.validateSignup($scope.user);
    $scope.error ? false : $scope.error = dbEntry.createNewUser($scope.user);
}

希望对您有所帮助。谢谢。