• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

398
Vistas
La mejor manera de persistir el inicio de sesión de firebase usando expo go

Estoy tratando de hacer una aplicación en React Native usando Expo Go. He logrado que Google inicie sesión y todo está bien. Desafortunadamente, el inicio de sesión del usuario NO persiste entre los reinicios de la aplicación. Al principio, pensé que era un problema de almacenamiento asíncrono, pero puedo guardar elementos en el almacenamiento sin problemas entre relanzamientos.

¿Qué datos necesitaría guardar manualmente para poder volver a iniciar la sesión del usuario cada vez que se inicie la aplicación?

Preferiría conservar los datos manualmente, ya que todos los métodos que se supone que funcionan, no funcionan para mí. Métodos que he probado:

  • Llamar setPersistence(getAuth(), browserLocalPersistence) me da un error, vea esta publicación para ver el error exacto que estoy recibiendo.
  • Usar onAuthStateChanged tampoco funciona para mí, de hecho, esa es la principal forma en que sé cuándo iniciar sesión. El objeto de usuario siempre es nulo, y nunca cambia de nulo hasta que el usuario inicia sesión nuevamente (lo que sucede en cada inicio de aplicación ).
     useEffect(() => getAuth().onAuthStateChanged(value => { if (value) { console.log("User is signed in"); } else { console.log("User is signed out"); // navigation.navigate("login") } }), [])

(Este código siempre imprimirá que el usuario ha cerrado la sesión en el reinicio de la aplicación).
En este punto, creo que sería más fácil si pudiera guardar las credenciales del usuario yo mismo y luego iniciar sesión en silencio al iniciar la aplicación. Estoy teniendo dificultades para encontrar el código para hacer esto.

about 3 years ago · Juan Pablo Isaza
3 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í

 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 3 years ago · Juan Pablo Isaza Denunciar

0

Debe usar SecureStore para almacenar los datos en el dispositivo. Algo así como LocalStorage en la web, SharedPreference en Android y NSUserDefaults en iOS.

Ejemplo:

 // save your thing async function save(key, value) { await SecureStore.setItemAsync(key, value); } // get your thing async function getValueFor(key) { let result = await SecureStore.getItemAsync(key); if (result) { alert("🔐 Here's your value 🔐 \n" + result); } else { alert('No values stored under that key.'); } }

Lea más aquí: https://docs.expo.dev/versions/latest/sdk/securestore/

la idea es guardar el JWT de Firebase en SecureStore, de modo que cuando se inicie la aplicación, verifique este valor, luego use ese JWT en la tienda segura cuando llame a su API

about 3 years ago · Juan Pablo Isaza Denunciar

0

La respuesta de @Bernard Allotey es correcta. Aquí hay un ejemplo con la versión compatible de firebase 9

 import firebase from 'firebase/compat/app'; import 'firebase/compat/auth'; import 'firebase/compat/firestore'; import 'firebase/compat/functions'; import AsyncStorage from '@react-native-async-storage/async-storage'; import {initializeAuth} from 'firebase/auth'; import {getReactNativePersistence} from 'firebase/auth/react-native'; import firebaseConfig from './firebaseConfig'; const fireApp = firebase.initializeApp(firebaseConfig); firebase.firestore(); firebase.functions(); // firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL); initializeAuth(fireApp, { persistence: getReactNativePersistence(AsyncStorage), }); export default firebase;
about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda