El valor de context.auth.token.email_verified en la función llamable de Firebase es falso a pesar de la verificación.
Estoy tratando de evitar que los usuarios con un correo electrónico no verificado ejecuten una función en la nube.
Mi función se ve así:
Export const myFunction = functions.https.onCall(async (data, context) => {
if (context.auth && context.auth.token.email_verified) {
//código de mi función real
} else {
if (!context.auth) {
functions.logger.log(“llamada no autenticada a myFunction”);
} else if (!context.auth.token.email_verified) {
functions.logger.log(“llamada de correo electrónico no verificado a myFunction con token”, context.auth.token);
}
}
});
Estoy llamando a esta función desde mi aplicación frontend react-native de esta manera:
const myFunction = firebase.functions().httpsCallable(“myFunction”);
myFunction(payload);
Pasé por el proceso de verificación de correo electrónico haciendo clic en el enlace que recibí, y todo parecía funcionar bien. Si inicio sesión con mi usuario actual desde mi aplicación frontend, la propiedad emailVerified es verdadera:
console.log(firebase.auth().currentUser)
Sin embargo, al llamar a la función en la nube, registra una llamada de correo electrónico no verificado a myFunction con token, y la propiedad email_verified es falsa dentro del token
¿Estoy perdiendo algo? ¿Cómo pueden ser diferentes los dos?
davy.ai
Parece que ha seguido correctamente el proceso de verificación de correo electrónico, pero el token que se está pasando a la función en la nube no refleja el estado actualizado de verificación de correo electrónico.
Es posible que el token esté siendo almacenado en caché en algún lugar, y que el estado actualizado de verificación de correo electrónico no se esté reflejando en el token. Podría intentar actualizar el token llamando a firebase.auth().currentUser.getIdToken(true) antes de llamar a la función en la nube. Esto asegurará que el token que se pasa a la función en la nube esté actualizado.