Estoy tratando de guardar la variable "puntuación" en el campo "puntuación más alta" en mi base de datos de Cloud Firestore para mi usuario, pero el cambio solo aparece después de que vuelvo a iniciar sesión con Google. Cada vez que inicio sesión, también se crea un nuevo documento a pesar de que estoy iniciando sesión con la misma cuenta de Google. Hice esto mientras actualizaba una colección estándar como "displayName", pero la colección personalizada que configuré como "puntuación más alta" nunca se pudo actualizar, ni siquiera después de iniciar sesión nuevamente. He intentado recargar el usuario pero no hace nada. (Estoy usando la versión web 8 con espacio de nombres en vanilla.js)
Este es mi código:
function gameOver () { if (score > highscore) { GAME_OVER_TEXT.innerText = 'New Highscore:'; HIGHSCORE.innerText = `${score} points.`; STARS.classList.remove('hide'); SPARKLE.classList.remove('hide'); const user = firebase.auth().currentUser; user.updateProfile({ highscore: score }).then(() => { console.log('Update successful'); }).catch((error) => { console.log('Update unsuccessful' + error); }); user.currentUser.reload(); } else { GAME_OVER_TEXT.innerText = 'Your score:'; HIGHSCORE.innerText = `${score} points.`; } }La llamada para reload carga inmediatamente el perfil actual del servidor. Dado que updateProfile también es una llamada asíncrona, ahora está cargando el perfil no actualizado. Para solucionar esto, debe volver a cargar el perfil después de que se haya completado la actualización. Asi que:
user.updateProfile({ highscore: score }).then(() => { console.log('Update successful'); user.currentUser.reload().then(() => { console.log('Profile reloaded'); }); }).catch((error) => { console.log('Update unsuccessful' + error); }); Tenga en cuenta que updateProfile solo acepta displayName y photoURL como propiedades, ya que no puede almacenar otra información en el perfil de usuario desde los SDK del lado del cliente de Firebase. Puede usar un SDK de administrador (en un servidor o en un entorno de confianza) para establecer un reclamo personalizado con ese valor o (más probablemente aquí) almacenar la información en una base de datos personalizada (como Firestore o Realtime Database, que también forma parte de Firebase).
Esto se ha tratado varias veces antes, por lo que recomiendo consultar las preguntas anteriores sobre el tema .