我正在尝试将使用过的UID添加到实时数据库中?

时间:2018-12-11 02:08:20

标签: javascript firebase user-interface firebase-realtime-database

我试图将用过的UID添加到实时数据库中,但是当我这样做时,UID又重新定义了,我不确定为什么会这样。

这是我的JS

    var userUID;

    firebase.auth().onAuthStateChanged(function (user) {
        if (user) {
            userUID = user.uid;
        } else {}
    });


    //Creating the Database for the Users using realtime mf (SAVE THE DATABSE INFO)
    database.ref('users/' + userUID).set({
        Name: name,
        Email: email,
        Password: password,
        Industry: industry, 
        Birthday: birthday
    });

这是实时数据库中的输出

Here is the output

谢谢

1 个答案:

答案 0 :(得分:1)

正如查理(Charlie)所说,onAuthStateChanged被异步触发。这意味着您的set()呼叫当前在设置userUID之前运行。

通过添加一些适当放置的日志语句,您可以最轻松地看到这一点:

console.log("Starting to listen to auth state");
firebase.auth().onAuthStateChanged(function (user) {
  console.log("Got auth state");
});
console.log("Started to listen to auth state");

运行此代码时,输​​出为:

  

开始收听身份验证状态

     

开始收听身份验证状态

     

获得身份验证状态

这可能不是您期望的,但是它完全解释了为什么您在数据库中获得undefined。在您运行database.ref('users/' + userUID).set({...时,尚未设置userUID

修复很简单:将需要userUID的代码移到获取代码的方法中:

var userUID;

firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
        userUID = user.uid;

        database.ref('users/' + userUID).set({
            Name: name,
            Email: email,
            Password: password,
            Industry: industry, 
            Birthday: birthday
        });
    }
});