Javascript Firebase将数据存储到错误的用户ID

Javascript Firebase将数据存储到错误的用户ID,javascript,firebase,firebase-realtime-database,firebase-authentication,nosql,Javascript,Firebase,Firebase Realtime Database,Firebase Authentication,Nosql,我正试图将数据存储到Firebase中的myusersRef,但它是由错误的键(userId)存储的 注册新用户后,我会给他们一定数量的积分 在其他地方,用户可以部署优惠,这些优惠应存储为与信用卡相同的用户ID。但是,创建了一个新的userID,剩下一个userID具有credits属性,另一个具有offer属性 deployOffer: function(){ try { var user = firebase.auth().currentUser;

我正试图将数据存储到Firebase中的my
usersRef
,但它是由错误的键(userId)存储的

注册新用户后,我会给他们一定数量的积分

在其他地方,用户可以部署优惠,这些优惠应存储为与信用卡相同的用户ID。但是,创建了一个新的userID,剩下一个userID具有credits属性,另一个具有offer属性

deployOffer: function(){
    try {
        var user = firebase.auth().currentUser;    
        var userOffersRef = database.ref('users/' + user.uid + '/offers');
        offersRef.push(this.newoffer);
        userOffersRef.push(this.newoffer);
        this.offerShow = false;
        this.post = false;
    } catch (err){
        console.log(err);
    }
},
当我只注册了一个密钥时,
firebase.auth().currentUser.uid
怎么可能返回不同的密钥?以下是我的db在注册并发布报价后的样子:


您的代码中有一个竞争条件。创建用户需要时间,异步操作也需要时间。但是您要立即为用户写入初始信用,这意味着您实际上是在将它们写入以前登录的用户(在过程中覆盖他们现有的信用和优惠)

解决方案是在
createUserWithEmailAndPassword
的完成侦听器中写入初始信用:

addUser: function () {
    firebase.auth().createUserWithEmailAndPassword(
      this.newuser.email, 
      this.newuser.password
    ).then(function(user) {
        console.log("adding user");
        var userRef = database.ref('users/' + user.uid + '/');
        userRef.set({'credits': this.newuser.credits});
        if (user){
            this.logInShow = false;
        }
    }).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
    });
},      

您的代码中有一个竞争条件。创建用户需要时间,异步操作也需要时间。但是您要立即为用户写入初始信用,这意味着您实际上是在将它们写入以前登录的用户(在过程中覆盖他们现有的信用和优惠)

解决方案是在
createUserWithEmailAndPassword
的完成侦听器中写入初始信用:

addUser: function () {
    firebase.auth().createUserWithEmailAndPassword(
      this.newuser.email, 
      this.newuser.password
    ).then(function(user) {
        console.log("adding user");
        var userRef = database.ref('users/' + user.uid + '/');
        userRef.set({'credits': this.newuser.credits});
        if (user){
            this.logInShow = false;
        }
    }).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
    });
},