CreateUser函数根本没有运行

时间:2015-02-19 12:11:23

标签: angularjs function angularfire

我试图在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);
}

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

指向引用,同步引用或身份验证对象的工厂。后者是我用来创建新用户的。请参阅此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
}

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

更新的工厂 - 它现在运行但我一直收到默认值&#34;连接错误 - 稍后再试一次&#34;在我尝试将任何内容插入数据库时​​,在switch语句中:

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

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

1 个答案:

答案 0 :(得分:1)

createNewUser工厂的

dbEntry方法正在回复承诺,但在你的工作中你没有回复承诺。 fbRef.getAuthObj().$createUser({})方法应该从工厂返回。

代码

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

希望这可以帮到你。感谢。