Estoy configurando una página web simple con Firebase Authentication y una base de datos de Firestore que toma las entradas del usuario de un formulario, agrega las entradas como un documento de colección en Firestore y luego también genera la colección completa. Cada documento de la colección tiene dos campos, el Nombre y el Cuerpo del documento. El objetivo es permitir a los usuarios realizar publicaciones en el sitio web utilizando el formulario de entrada. Todo lo que describí funciona, pero ahora me gustaría mostrar el user.displayName con la publicación, para mostrar quién creó exactamente la entrada del usuario, y eso es lo que no sé cómo hacer. Aquí está el código relevante, del script.js del sitio web:
const createForm = document.querySelector('#create-form'); createForm.addEventListener('submit', (e) => { e.preventDefault(); db.collection('forumposts').add({ Body: createForm['body'].value, //the line below is what I cannot figure out how to set up Name: string(user.displayName) }).then(() => { //reset the form createForm.reset(); }).catch(err => { console.log(err.message) }) });Todavía estoy aprendiendo sobre JavaScript, así que pido disculpas si me estoy perdiendo algo obvio. Sé que el displayName del usuario (que se recopila al registrarse) se recopila correctamente, ya que puedo registrarlo en la consola y aparece correctamente. Simplemente no puedo entender cómo agregarlo como un campo en esta entrada de colección de base de datos. Intenté buscar aquí en SO preguntas relacionadas, pero solo recibo preguntas relacionadas con cómo el usuario puede agregar un nombre para mostrar al registrarse. Ya tengo el nombre para mostrar, solo necesito ingresarlo en la base de datos. ¡Cualquier ayuda sería muy apreciada!
¿Dónde se define el "user" ? Eso podría ser nulo si ningún usuario ha iniciado sesión, por lo que es mejor buscar al usuario.
const createForm = document.querySelector('#create-form'); createForm.addEventListener('submit', (e) => { e.preventDefault(); const user = firebase.auth().currentUser if (user) { db.collection('forumposts').add({ Body: createForm['body'].value, Name: user.displayName || "No username" }).then(() => { //reset the form createForm.reset(); }).catch(err => { console.log(err.message) }) } else { console.log("NO user logged in") } }); No necesita el constructor String() . Si se define displayName , será una cadena. Puede usar if (user.displayName) antes de agregar la publicación para verificar si el usuario tiene un nombre para mostrar.
Es String(), no string(). Siempre que displayName sea una propiedad del usuario, se agregará a la base de datos.