Estoy usando la siguiente función de nube de Firebase para confirmar que existe una variable "referral_code" en la parte de "referencias" de mi base de datos en tiempo real.
exports.validateReferral = functions.https.onCall((data, context) => { const referral_code = data.ref console.log("Cloud verifying referral code, code is " + referral_code) return admin.database().ref().child("referrals").child(referral_code.trim()).once("value").then((snapshot) => { console.log(snapshot.val()) if (snapshot.exists()) { console.log("referral code is valid"); return true } else { console.log("referral code is not valid"); return false } }) })Para el contexto, aquí está la estructura de mi base de datos.
El código anterior funciona como se esperaba (principalmente), si le paso "Test1" o "Test2", devuelve válido, si paso "Test3" no es válido.
> Cloud verifying referral code, code is Test1 > 0 > referral code is valid > Cloud verifying referral code, code is Test2 > 0 > referral code is valid > Cloud verifying referral code, code is Test3 > null > referral code is not validPero... si paso "Test3" o un valor que no está en la base de datos, a pesar de que la función de la nube muestra que no es válido, el código del lado del cliente que uso para llamar a esa función vuelve válido de todos modos.
var ref = new URLSearchParams(window.location.search).get('ref') console.log("checkReferral ref is " + ref) console.log("checkReferral window.location.search is " + window.location.search) if (ref) { console.log("checkReferral ref found") if (validateReferral({ ref: ref })) { console.log("checkReferral ref is valid") return true } else { console.log("checkReferral ref is not valid") return false } }Y esta es la salida:
checkReferral ref is Test3 checkReferral window.location.search is ?ref=Test3 checkReferral ref found checkReferral ref is valid¿Alguna idea de por qué podría ser esto?
Resolví el problema. Al llamar a validateReferral desde el lado del cliente, necesitaba envolver la llamada de función en una promesa.