我试图在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';
}
});
}
};
}]);
有人可以指出这里有什么问题吗?
答案 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);
}
希望这可以帮到你。感谢。