He estado tratando de crear un método de utilidad que devolverá el objeto de usuario o si existe el objeto de usuario. Sin parámetros, debería devolver un booleano y con el parámetro "getUser" debería devolver el objeto de usuario, pero siempre devuelve indefinido. Esto pareció funcionar por un tiempo, pero luego tomé un descanso y volví y siempre regresaba indefinido. Código a continuación
import { getAuth, onAuthStateChanged } from "firebase/auth"; export default function checkAuthState(type?:string){ const auth = getAuth() onAuthStateChanged(auth, (user) => { if (user) { if(!type) return true if(type === "getUser") return user else return true } else { if(!type) return false else return false } }); }Su return true devuelve un valor a onAuthStateChanged , que es lo que llama a su devolución de llamada. onAuthStateChanged no está haciendo nada con ese valor.
Si desea tener una promesa que se resuelva una vez que se haya restaurado el estado inicial del usuario, puede hacerlo con:
function checkAuthState(type?:string){ const auth = getAuth() return new Promise((resolve, reject) => { const unsubscribe = onAuthStateChanged(auth, (user) => { if (user) { if(!type) resolve(true) if(type === "getUser") resolve(user) else resolve(true) } else { if(!type) resolve(false) false else resolve(false) } unsubscribe(); }); }) }Y luego llámalo así:
checkAuthState().then((result) => { console.log(result); }) O cuando se usa async / await :
const result = await checkAuthState(); console.log(result);