Estoy tratando de declarar un booleano de mi archivo de configuración firebase.js que depende de una declaración if-else que verifica si un usuario inició sesión o no.
Quiero almacenar el estado de inicio de sesión de un usuario en una variable booleana y exportar esa variable a través de diferentes componentes en mi aplicación React.
Entonces, si el usuario inició sesión, quiero que mi variable isLoggedIn sea verdadera y exporte eso. Pero quiero que el booleano isLoggedIn se actualice según el estado de inicio de sesión antes de que se exporte.
Aquí está mi archivo firebase.js
import { initializeApp } from 'firebase/app'; import { getAuth } from "firebase/auth"; const firebaseConfig = { //private keys }; const app = initializeApp(firebaseConfig); export const auth = getAuth(app); //Problem let isLoggedIn = false; function checkLoggedInStatus() { if (auth.currentUser !== null) { //ie user is signed in isLoggedIn = true; } return isLoggedIn; } checkLoggedInStatus(); export isLoggedIn;Hay (al menos) dos problemas aquí.
Lo que sigue inmediatamente a export puede ser, entre otras cosas:
export let foo = 5; ) - esto inicializa la variable y la exporta desde el módulo en una sola líneafunction o class - similar a la anteriordefault , si quieres indicar que lo que estás exportando es la exportación por defectoexport { foo } Pero hacer export isLoggedIn; es una sintaxis inválida: no entra en ninguna de esas categorías (ni en ninguna de las otras construcciones permitidas).
El otro problema es que es posible que la propiedad .currentUser aún no exista si la autenticación no se ha inicializado. Asegúrate de esperar a que se haga primero. Utilice la versión de observador en su lugar .
Dado que es asíncrono, tiene algunas opciones para llevar esa información al resto de su secuencia de comandos. El primero, que recomendaría, es hacer que este módulo de autenticación llame al resto de su secuencia de comandos (en otras palabras, haga de este módulo su punto de entrada, o cerca de él). Por ejemplo:
import { initializeApp } from 'firebase/app'; import { getAuth, onAuthStateChanged } from "firebase/auth"; import { renderApp } from './renderApp'; const firebaseConfig = { //private keys }; const app = initializeApp(firebaseConfig); const auth = getAuth(app); onAuthStateChanged(auth, (user) => { if (user) { renderApp(user); } else { // No user renderApp(); } }); donde renderApp es el punto de partida para el resto de su código que depende del usuario. No puede exportar fácilmente isLoggedIn directamente desde el módulo Firebase porque se recupera de forma asíncrona: llamar a renderApp con él y luego pasar el valor es la mejor manera de hacerlo.
También puede exportar una Promesa desde este script del módulo Firebase, uno que resuelve si el usuario ha iniciado sesión o no, pero eso requerirá que todos los consumidores del módulo tengan que llamar a .then sobre el valor antes de poder usarlo. , que podría ser bastante desordenado. Es mejor usar la secuencia de comandos del módulo Firebase como punto de entrada y solo llamar al resto de la secuencia de comandos una vez que el objeto de autenticación haya terminado de cargarse.