usuario register recordar password eliminar disable data contraseña auth javascript web firebase firebase-authentication

javascript - recordar - register user in firebase



¿Cómo detecto si un usuario ya inició sesión en Firebase? (7)

No es posible saber si un usuario estará firmado cuando una página comienza a cargarse, aunque hay una solución alternativa.

Puede memorizar el último estado de autenticación en localStorage para conservarlo entre sesiones y entre pestañas.

Luego, cuando la página comienza a cargarse, puede asumir de manera optimista que el usuario volverá a iniciar onAuthStateChanged automáticamente y posponer el diálogo hasta que pueda estar seguro (es decir, después de los incendios de onAuthStateChanged ). De lo contrario, si la clave localStorage está vacía, puede mostrar el cuadro de diálogo de inmediato.

El evento firebase onAuthStateChanged se disparará aproximadamente 2 segundos después de cargar una página.

// optimistically assume user will be logged in automatically // e.g. if (!!localStorage.getItem(''myPage.expectSignIn'')) showDialog() firebase.auth().onAuthStateChanged(user => { if (user) { localStorage.setItem(''myPage.expectSignIn'', ''1'') } else { localStorage.removeItem(''myPage.expectSignIn'') // Implement logic to trigger the login dialog here or redirect to sign-in page. // e.g. showDialog() } })


Estoy usando esto con React y react-router . Puse el código anterior en componentDidMount de mi componente raíz de la aplicación. Allí, en el render, tengo algunas PrivateRoutes

<Router> <Switch> <PrivateRoute exact path={routes.DASHBOARD} component={pages.Dashboard} /> ...

Y así es como se implementa mi PrivateRoute:

export default function PrivateRoute(props) { return firebase.auth().currentUser != null ? <Route {...props}/> : localStorage.getItem(''myPage.expectSignIn'') // if user is expected to sign in automatically, display Spinner, otherwise redirect to login page. ? <Spinner centered size={400}/> : ( <> Redirecting to sign in page. { location.replace(`/login?from=${props.path}`) } </> ) } // Using router Redirect instead of location.replace // <Redirect // from={props.path} // to={{pathname: routes.SIGN_IN, state: {from: props.path}}} // />

Estoy usando la API de nodo de Firebase en mis archivos javascript para iniciar sesión en Google.

firebase.initializeApp(config); let provider = new firebase.auth.GoogleAuthProvider(); firebase.auth().signInWithPopup(provider);

Esto funciona bien y el usuario puede iniciar sesión con sus credenciales de Google. Cuando el usuario visita la página nuevamente, la ventana emergente se abre nuevamente, pero como ya ha iniciado sesión, la ventana emergente se cierra sin requerir ninguna interacción por parte del usuario. ¿Hay alguna forma de verificar si ya hay un usuario conectado antes de que aparezca la ventana emergente?


No es necesario usar la función onAuthStateChanged () en este escenario.

Puede detectar fácilmente si el usuario está conectado o no ejecutando:

var user = firebase.auth().currentUser;

Para aquellos que enfrentan el problema de "retorno nulo", es solo porque no están esperando que se complete la llamada de Firebase.

Supongamos que realiza la acción de inicio de sesión en la página A y luego invoca la página B, en la página B puede llamar al siguiente código JS para probar el comportamiento esperado:

var config = { apiKey: "....", authDomain: "...", databaseURL: "...", projectId: "..", storageBucket: "..", messagingSenderId: ".." }; firebase.initializeApp(config); $( document ).ready(function() { console.log( "testing.." ); var user = firebase.auth().currentUser; console.log(user); });

Si el usuario está registrado, entonces "var user" contendrá la carga útil JSON esperada, de lo contrario, será simplemente "nulo"

Y eso es todo lo que necesitas.

Saludos


Otra forma es usar lo mismo que usa Firebase.

Por ejemplo, cuando el usuario inicia sesión, firebase almacena los siguientes detalles en el almacenamiento local. Cuando el usuario vuelve a la página, firebase usa el mismo método para identificar si el usuario debe iniciar sesión automáticamente.

ATENCIÓN: ya que Firebase no enumera ni recomienda esto. Puede llamar a este método una forma no oficial de hacerlo. Lo que significa más adelante si Firebase cambia su funcionamiento interno, este método puede no funcionar. O en resumen. ¡Úselo bajo su propio riesgo! :)


Primero importa lo siguiente

import Firebase import FirebaseAuth

Que

// Check if logged in if Auth.auth().currentUser == nil { // Do smth if user is not logged in }


También puede verificar si hay un usuario actual

var user = firebase.auth().currentUser; if (user) { // User is signed in. } else { // No user is signed in. }