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

时间:2017-01-12 09:42:33

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

我试图将数据存储到Firebase中的usersRef,但是它是由错误的密钥(userId)存储的。

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

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

        }
    },        

在其他地方,用户可以部署优惠,优惠应存储在与信用相同的用户ID中。但是,创建了一个新的userID,我留下了一个userId,它有一个credit属性,另一个有一个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在注册然后发布报价后的样子:

enter image description here

1 个答案:

答案 0 :(得分:1)

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

解决方案是在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;
        // ...
    });
},