Estoy construyendo un sitio pequeño usando HTML simple y javascript, y estoy usando Firebase para la autenticación. Cuando los usuarios van a una página determinada, me gustaría redirigirlos a otra página si han iniciado sesión. Este es el código que estoy usando para lograrlo (todas las secuencias de comandos se colocan en <head> ):
<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script> <script> const firebaseConfig = { // ... }; firebase.initializeApp(firebaseConfig); firebase.auth().onAuthStateChanged((user) => { if (user) { window.location.href = "/feed"; } }); </script> Esto redirige al usuario correctamente, pero el usuario ve brevemente la página destinada a usuarios no autenticados durante el tiempo que tarda Firebase en obtener el estado de autenticación y que se active la devolución de llamada onAuthStateChanged . ¿Hay alguna manera de evitar que se muestre la página HTML hasta que se llame a onAuthStateChanged?
¿has probado async/await?
Una vez que un archivo Html se representa de arriba a abajo y no está utilizando el método async/await, html seguirá representando una vez que sea una función asíncrona.
Te recomendaría que lo pruebes así para obligar a la espera de procesamiento a la respuesta de autenticación:
<script> const firebaseConfig = { // ... }; firebase.initializeApp(firebaseConfig); async function firebaseAuth(){ try{ const authResponse = await firebase.auth().onAuthStateChanged((user) => { window.location.href = "/feed"; }); }catch(e){ console.log(e); } }; firebaseAuth(); </script>Puede leer más en el documento: https://www.w3schools.com/js/js_async.asp
Firebase restaura automáticamente al usuario cuando se carga la página. Sin embargo, esto requiere una llamada al servidor, entre otras cosas, para verificar si la cuenta fue deshabilitada, por lo que puede llevar algún tiempo.
La solución alternativa común es almacenar su propio valor en el almacenamiento local que indica si cree que es probable que el usuario haya iniciado sesión y (si es así) redirigir a la página autenticada de inmediato.
Si/cuando el usuario alguna vez inicia sesión, tendría un oyente de estado de autenticación en esa página para redirigirlo, por lo que la mayoría de los usuarios verán el camino feliz en ese caso.
Firebaser Michael Bleigh cubrió esto en una charla en Google I/O aquí .