只有 运行 只在实时数据库中写入一次值

Only run write value at realtime database only once

firebase.auth().onAuthStateChanged(function(user) { 
  if (user){
    firebase.database().ref("users/" + user.uid).set({
      email:user.email, 
      points:"500",
      uid: user.uid
    })

     var query = firebase.database().ref("users").child(user.uid);
     query.once("value").then(function(snapshot) {
         var email = snapshot.val().Email;
         var point = snapshot.val().points;
         document.getElementById("points").innerHTML=point;
     });

上面的代码用于写入和从数据库中检索数据, 但它没有按计划进行。每当有变化时 积分,它会自动恢复到500分。有没有办法让一个用户的数据只写一次?

听起来你只想在用户数据还不存在的情况下写入初始点。为此,您可以 use a transaction:

if (user){
  const userRef = firebase.database().ref("users/" + user.uid);
  userRef.transaction((current) => {
    if (!current) return {
      email:user.email, 
      points:"500",
      uid: user.uid
    }
  })
  ...

此 returns 如果数据尚不存在,则为初始值。因为它 returns 否则没有价值,当数据已经存在时事务被中止。