Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

292
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda