我试图将数据存储到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在注册然后发布报价后的样子:
答案 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;
// ...
});
},