在身份验证中创建用户后无法将数据插入数据库

时间:2018-05-05 20:42:54

标签: angular firebase firebase-realtime-database

我想创建一个能够在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以将用户的数据插入databasecreateUserWithEmailAndPassword有效,但我收到以下错误:

Reference.push failed: first argument contains undefined in property 'users.email'

userForm包含用户数据。可能有什么不对?

3 个答案:

答案 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

在then函数中获取当前用户

编辑跟随你的评论(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)的值