用户数据未正确创建或插入Firebase数据库

时间:2016-11-22 15:13:35

标签: firebase firebase-realtime-database firebase-authentication

我正在尝试编写一些代码,用于在我的Firebase应用中创建/插入用户数据(基于网络)。

我想在用户使用他们的电子邮件进行身份验证后执行此操作。密码(该部分工作正常)。

但是我在Firebase数据库中存储用户的ID,用户名,电子邮件,年龄和个人资料图片时遇到了一些问题。

这是我瞄准的数据库结构:

MyAppReference
|
|___users
        |
        |_____UID                   
                |___username
                |___email
                |___age
                |­­­___profile_picture

当用户使用他们的电子邮件注册后生成用户ID(UID)时密码,我想将其保存为用户"用户"中的唯一标识符。领域。 然后在他们的UID中我想存储他们的用户名,电子邮件,年龄和profile_picture。 但我不知道如何在同一段代码中创建父(UID)和子代。

这是我目前的尝试:

function insertUserDetails() {

    var useremail = "johndoe@gmail.com";
    var userpassword = document.getElementById("passwordfield").innerHTML;

    firebase.auth().createUserWithEmailAndPassword(useremail, userpassword).then(function(user) {
        console.log("User is authenticated, attempting to enter the user data now...");

        // Define variables for sending to database:
        var username = "JohnDoe";
        var userId = user.uid;
        var age = "50";
        var profile_picture = "http://zntent.com/wp-content/uploads/2016/03/will-ferrell-film.jpg";

        function writeUserData(userId, username, useremail, age, profile_picture) {

            // Attempting to create the parent "UID" (child of "users") here:
            function addStore(){
                var rootRef = firebase.database().ref();
                var storesRef = rootRef.child('MyAppReference/users');
                var newStoreRef = storesRef.push();
                newStoreRef.set({
                    "UID": userId,
                });
            }
            // Attempting to create/insert user data under that user's UID:                     
            firebase.database().ref('users/' + userId).set({
                username: username,
                email: email,
                age: age,
                profile_picture : profile_picture
            });
        }

    }, function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        Console.log("There was an error: " + errorCode + "." + errorMessage);
        // ...
    });
}

这不起作用,但我在测试时没有在控制台中收到任何错误。用户正在进行身份验证,其用户名和用户ID显示在Firebase控制台中,但数据库中没有这些用户ID和用户ID。

这样做的正确方法是什么?我习惯使用SQL,这是我第一次使用noSQL数据库,所以也许我完全错了?

任何帮助解决这个问题都会非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:1)

我认为如果你只是调用writeUserData函数(它被定义,但从未调用过),它应该可以工作。

您可以删除addStore功能,因为在您写信时会创建位置users/${userId}

以下是一个完整的例子。请注意,我删除了writeUserData函数并且只是内联代码,我还内联了要设置到数据库的变量。

function insertUserDetails() {

    var useremail = "johndoe@gmail.com";
    var userpassword = document.getElementById("passwordfield").innerHTML;

    firebase.auth().createUserWithEmailAndPassword(useremail, userpassword).then(function(user) {
        console.log("User is authenticated, attempting to enter the user data now...");

        firebase.database().ref('users/' + userId).set({
            username: "JohnDoe",
            email: useremail,
            age: "50",
            profile_picture : "http://zntent.com/wp-content/uploads/2016/03/will-ferrell-film.jpg"
        });

    }, function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        Console.log("There was an error: " + errorCode + "." + errorMessage);
        // ...
    });
}