我想创建一个能够在firebase中进行身份验证然后在数据库中插入用户数据的用户。 我正在使用的代码如下:
this.app.auth().createUserWithEmailAndPassword(userForm.value.email, userForm.value.password)
.then(res => {
console.log('2 form data:', userForm.value);
this._firebase.app.database().ref('users').push({
email: userForm.value.email,
uid: res.uid
})
})
.catch(err => {
console.log('Something went wrong:', err.message);
});
我正在使用app
将用户插入authentication
和_firebase
以将用户的数据插入database
。 createUserWithEmailAndPassword
有效,但我收到以下错误:
Reference.push failed: first argument contains undefined in property 'users.email'
userForm
包含用户数据。可能有什么不对?
答案 0 :(得分:1)
执行以下操作:
this.app.auth().createUserWithEmailAndPassword(userForm.value.email, userForm.value.password)
.then(res => {
console.log('2 form data:', userForm.value);
var user = firebase.auth().currentUser;
console.log(user.email);
console.log(user.uid);
return this._firebase.app.database().ref('users').push({
email: user.email,
uid: user.uid
})
})
.catch(err => {
console.log('Something went wrong:', err.message);
});
通常不会在当时传递给函数的参数。异步函数createUserWithEmailAndPassword
“返回包含非空firebase.Promise
的{{1}}”请参阅https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithEmailAndPassword
所以你必须使用firebase.auth.UserCredential
编辑跟随你的评论(edit2:已被删除: - ))
执行类似的功能,并使用userForm的数据调用它:
firebase.auth().currentUser;
PS:注意function pushUser(userForm.value) {
//create a JavaScript object holding the values you want to push to Firebase
const objectToPush = {
email: userForm.value.email,
uid: userForm.value.uid,
address: userForm.value.address,
.....
};
return this.app.auth().createUserWithEmailAndPassword(userForm.value.email, userForm.value.password)
.then(res => {
//var user = firebase.auth().currentUser; <- you don't need that anymore
//since you have the values in the object
return this._firebase.app.database().ref('users').push(objectToPush);
})
.catch(err => {
console.log('Something went wrong:', err.message);
});
}
仍然指你想要的东西。
答案 1 :(得分:0)
我无法发表评论,所以我会在这里提出答案,
this._firebase.app.database().ref('users').push
这不是指firebase所以你需要在函数vat的开头定义= this然后将你的代码chagne到这个:
that._firebase.app.database().ref('users').push
答案 2 :(得分:0)
问题似乎在'userForm.value.email'。
获取表单输入的最简单方法是使用与ngModel的双向绑定。
如果您使用的是活动表格,请使用:
emailVal:string = this.formGroup.get('emailCtrl').value;
获取表单组(formGroup)的表单控件(emailCtrl)的值