Esta función de firebase realiza un seguimiento de los cambios de datos de una colección de firestore y los envía al contacto existente de un CRM.
// LISTENER exports.listenData = functions.https.onRequest(async(request, response) => { // Keep track of profile collection db.collection('profile').onSnapshot(async(querySnapshot) => { console.log('change in profile'); let changedDocs = querySnapshot.docChanges(); for (let i = 0; i < changedDocs.length; i++) { let change = changedDocs[i]; if (!change.doc.exists) { continue; } console.log('change in profile in loop'); let profileDocData = change.doc.data(); let body = { "customField": { "subscription_expiration_date": "" } }; let user = await admin.auth().getUser(change.doc.id); // profile try { body.customField.subscription_expiration_date = profileDocData.expiration_date; } catch (error) { body.customField.subscription_expiration_date = ''; } console.log("Profile changed by " + user.email ? ? "Unknown"); try { let res = await axios.get('EndPoint URL ?email=' + user.email, { headers: { "Authorization": "Bearer Token" } }); let userId = res.data.contacts[0].id; axios.put('EndPoint URL /contacts/' + userId, body, { headers: { "Authorization": "Bearer Token" } }); } catch (error) { console.log('Error on profile'); } } }); response.send("Listening..."); });Producción:
Captura de pantalla de la consola
Error
Excepción de una función terminada: Error: No hay registro de usuario correspondiente al identificador proporcionado.
¡Estoy confundido aquí! ¿Cualquiera?
En primer lugar, cuando envía una respuesta al cliente, la función se cierra (es por eso que obtiene "una función terminada "). Por lo tanto, si desea monitorear los cambios, debe configurar un disparador: https://firebase.google.com/docs/functions/firestore-events .
El error en sí dice que no hay ningún usuario en la sección de autenticación de Firebase con la identificación que está proporcionando a admin.auth().getUser .