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; });El código anterior es para escribir y recuperar los datos de la base de datos, pero no va de acuerdo con los planes. Cada vez que hay cambios en los puntos, restaura automáticamente los puntos a 500. ¿Hay alguna forma en que los datos de un usuario se escriban solo una vez?
Parece que solo desea escribir los puntos iniciales si los datos del usuario aún no existen. Para eso puedes usar una transacción :
if (user){ const userRef = firebase.database().ref("users/" + user.uid); userRef.transaction((current) => { if (!current) return { email:user.email, points:"500", uid: user.uid } }) ...Esto devuelve el valor inicial si aún no existen datos. Dado que de lo contrario no devuelve ningún valor, la transacción se aborta cuando ya existen datos.