Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

291
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!