Estoy usando la API del nodo de base de fuego en mis archivos javascript para el inicio de sesión de 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 comprobar si ya hay un usuario que inició sesión antes de que aparezca la ventana emergente?
javascript
web
firebase
firebase-authentication
Jophin Joseph
fuente
fuente
onAuthStateChanged
. Esto se agregó en 4.6.0: firebase.google.com/support/release-notes/js#4.6.0 Puede obtenerlo desde el método de inicio de sesión o desdecurrentUser.metadata
(última hora de inicio de sesión y hora de creación) ...También puede comprobar si hay un usuario actual
fuente
Es no es posible decir si un usuario va a ser firmada cuando se inicia una página de carga, hay un trabajo alrededor sin embargo.
Luego, cuando la página comience a cargarse, puede asumir con optimismo que el usuario volverá a iniciar sesión automáticamente y pospondrá el cuadro de diálogo hasta que pueda estar seguro (es decir, después de los
onAuthStateChanged
incendios). De lo contrario, si ellocalStorage
clave está vacía, puede mostrar el cuadro de diálogo de inmediato.El
onAuthStateChanged
evento de base de fuego se activará aproximadamente 2 segundos después de que se cargue una página.Estoy usando esto con React y react-router . Puse el código anterior en el
componentDidMount
componente raíz de mi aplicación. Allí, en el render, tengo algunosPrivateRoutes
Y así es como se implementa mi PrivateRoute:
fuente
No es necesario utilizar la función onAuthStateChanged () en este escenario.
Puede detectar fácilmente si el usuario está registrado o no ejecutando:
Para aquellos que enfrentan el problema de "devolver nulo", es solo porque no está esperando a que se complete la llamada a la base de fuego.
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:
Si el usuario está registrado, "var user" contendrá la carga útil JSON esperada; de lo contrario, será simplemente "nulo".
Y eso es todo lo que necesitas.
Saludos
fuente
firebase.auth.currentUser
devuelve indefinido independientemente de que hayaOtra 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.
ATTN: Como esto no está listado ni recomendado por firebase. Puede llamar a este método una forma no oficial de hacer esto. Lo que significa que más adelante, si firebase cambia su funcionamiento interno, es posible que este método no funcione. O en resumen. ¡Úselo bajo su propio riesgo! :)
fuente
Esto funciona:
fuente
Si está permitiendo usuarios anónimos, así como aquellos que iniciaron sesión con correo electrónico, puede usar
firebase.auth().currentUser.isAnonymous
, que devolverátrue
ofalse
.fuente
utilizar
Firebase.getAuth()
. Devuelve el estado actual del cliente de Firebase. De lo contrario, el valor de retorno esnull
Aquí están los documentos: https://www.firebase.com/docs/web/api/firebase/getauth.htmlfuente
firebase.getAuth()
Primero importe lo siguiente
Luego
fuente