Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
¿Cómo bloquear los correos electrónicos ya utilizados en la mayoría de los boletines básicos de react/firebase?

Es solo un script que envía un correo electrónico a firestore db, no sé cómo verificar si hay correos electrónicos repetidos en db. Código:

 const Newsletter = () => { const [input, setInput] = useState(""); const inputHandler = (e) => { setInput(e.target.value) } const submitHandler = (e) => { e.preventDefault(); if(input) { console.log(input); addDoc(collection(db, 'emails'),{ email: input, time: Timestamp.now(), }) } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Entiendo que desea evitar que dos documentos de Firestore de la colección de emails contengan el mismo valor para su campo de email . Un enfoque posible es utilizar una Transaction .

Como está utilizando React y JS SDK, no puede utilizar una consulta en su transacción. Por lo tanto, debe mantener otra colección en la que almacene un documento para cada dirección de correo electrónico existente, con la dirección de correo electrónico como ID del documento .

De esta manera, puede usar un código como el siguiente (no probado):

 import { runTransaction, ... } from "firebase/firestore"; try { const emailToBeSaved = ....; // The new email await runTransaction(db, async (transaction) => { const emailDocRef = doc(db, 'existingEmails', emailToBeSaved); const emailDoc = await transaction.get(emailDocRef); if (emailDoc.exists()) { throw 'This email is already present in the DB'; } transaction .set(doc(db, 'existingEmails', emailToBeSaved), { email: emailToBeSaved }) // The value of this last parameter is not important, it could be {foo: "bar"} .set(doc(collection(db, 'emails')), { email: emailToBeSaved, time: Timestamp.now(), }) }); console.log("Transaction successfully committed!"); } catch (e) { console.log("Transaction failed: ", e); }

Entonces, verificamos, en la Transacción, si existe un documento con ID = emailToBeSaved en la colección de correos electrónicos existingEmails .

  • Si es así, lanzamos un error.
  • Si no, creamos este documento en la colección de correos electrónicos existingEmails (con datos ficticios, solo nos interesa la ID del documento, no su contenido) y agregamos el documento en la colección de emails . Estas dos escrituras se realizan en la Transacción.

Tenga en cuenta que puede simplificar el enfoque utilizando los valores de correo electrónico como ID de los documentos en la colección de emails . De esta manera, no es necesario tener una colección adicional de correos electrónicos existingEmails .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda