Tengo este archivo de instalación:
firebase.ts
import { initializeApp } from 'firebase/app'; import * as firebaseAuth from 'firebase/auth'; import config from './config'; const firebaseApp = initializeApp(config.env.firebase); export const app = firebaseApp; export const auth = firebaseAuth.initializeAuth(firebaseApp); export const signInWithEmailAndPassword = (email: string, password: string) => firebaseAuth.signInWithEmailAndPassword(auth, email, password); export const signOut = () => { console.log('sign out'); return firebaseAuth.signOut(auth); };Así es como estoy iniciando sesión
iniciar sesión.tsx
// Button onclick... await signInWithEmailAndPassword(email, password); history.replace('/');Y en mi componente PrivateRoute tengo
const PrivateRouteComponent: React.FC<Props> = ({ component: Component, ...rest }) => { const [currentUser, loading, error] = useAuthState(auth); console.log('[currentUser, loading, error]', [currentUser, loading, error]); if (loading) { return null; }El comportamiento real es:
nullLo esperado es que el usuario persista si actualizo la página.
¿Por qué pierdo el usuario cuando actualizo toda la página? ¿Puedo mantener el usuario después de actualizar la página de alguna manera?
Contexto adicional:
"firebase": "^9.6.7", // migrating from ^7 "react-firebase-hooks": "^5.0.2", // migrating from ^2En lugar de initializeAuth , el correcto para usar aquí es getAuth .
export const auth = firebaseAuth.getAuth(firebaseApp);De forma predeterminada, parece persistir en IndexDB. Puedes cambiarlo llamando al:
firebaseAuth.setPersistence(auth, firebaseAuth.browserLocalPersistence); firebaseAuth.setPersistence(auth, firebaseAuth.browserSessionPersistence); firebaseAuth.setPersistence(auth, firebaseAuth.indexedDBLocalPersistence); // default firebaseAuth.setPersistence(auth, firebaseAuth.inMemoryPersistence);