Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
React Native Firebase undefined no es un objeto (evaluando 'this.storage.setItem')

Es la primera vez que uso firebase y estoy tratando de configurar la persistencia pero obtengo un error. Estoy usando expo en reaccionar nativo . Aquí está mi código:

 import firebase from "firebase/compat/app"; import "firebase/compat/auth"; import "firebase/compat/firestore"; const confirmCode = async () => { const credential = firebase.auth.PhoneAuthProvider.credential( verificationId, code ); firebase .auth() .setPersistence(firebase.auth.Auth.Persistence.LOCAL) .then(async () => { return firebase .auth() .signInWithCredential(credential) .then((result) => { setIsNew(result.additionalUserInfo.isNewUser); result.user.getIdToken().then((token) => setUserToken(token)); }); }) .catch((error) => { console.log(error.message); }); };

Recibo el error undefined no es un objeto (evaluando 'this.storage.setItem') cuando se trata de persistir.

Estoy usando esta página en Google Docs y la versión más reciente de Firebase 9.6.8. Funciona bien sin persistencia, pero el usuario debe iniciar sesión cada vez que abre una aplicación.

He buscado en docenas de subprocesos en stackoverflow y github pero no he encontrado ninguna respuesta para ese problema.

Y tampoco muestra que ningún usuario haya iniciado sesión con o sin persistencia:

 if (firebase.auth().currentUser !== null) { console.log(firebase.auth().currentUser.uid); } else { console.log("no users logged"); }

Pensé en usar de alguna manera el almacenamiento asíncrono, pero realmente no sé cómo podría hacerlo funcionar.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Ok, entonces me di cuenta de que para preservar el estado de inicio de sesión, en realidad tienes que hacer un proceso especial si usas expo. Debe inicializar su propia autenticación, pasando Async Storage, así. Al hacerlo de esta manera, no hay necesidad de configurar la persistencia.

 import { initializeApp } from "firebase/app" import { initializeAuth } from "firebase/auth" import { getReactNativePersistence } from "firebase/auth/react-native" import AsyncStorage from "@react-native-async-storage/async-storage" const defaultApp = initializeApp(config); initializeAuth(defaultApp, { persistence: getReactNativePersistence(AsyncStorage) });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Si alguien tiene el mismo problema, logré resolverlo con la ayuda de Bernard Allotey. Así es como lo hice:

En aplicación.js:

 import { initializeApp } from "firebase/app"; import { initializeAuth } from "firebase/auth"; import { getReactNativePersistence } from "firebase/auth/react-native"; import AsyncStorage from "@react-native-async-storage/async-storage"; import firebaseConfig from "./firebaseConfing"; useEffect(async () => { const defaultApp = initializeApp(firebaseConfig); initializeAuth(defaultApp, { persistence: getReactNativePersistence(AsyncStorage), }); }, []);

En mi primera pantalla:

 import { getAuth, onAuthStateChanged } from "firebase/auth"; onAuthStateChanged(getAuth(), (user) => { if (user) { console.log(user); } else { console.log("signed out"); } });

Y para iniciar sesión estoy usando esto:

 import { getAuth, signInWithPhoneNumber } from "firebase/auth"; async function sendVerification() { const auth = getAuth(); signInWithPhoneNumber( auth, countryCode + phoneNumber, recaptchaVerifier.current ).then((confirmationResult) => navigation.navigate("SmsCode", { confirmationResult: confirmationResult, phoneNumber: phoneNumber, }) ); } // next screen const confirmCode = async () => { confirmationResult.confirm(code).then((result) => { result.user.getIdToken().then(async (token) => { setUserToken(token); }); }); };

Ahora el usuario persiste como yo quería. Muchas gracias por la ayuda.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda