Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

811
Vistas
Usuario de cierre de sesión de Firebase todas las sesiones

Estoy usando la autenticación de Firebase en mi aplicación iOS. ¿Hay alguna forma en Firebase cuando el usuario inicia sesión en mi aplicación con Firebase y luego cierra la sesión de ese usuario en todos los demás dispositivos (sesiones)? ¿Puedo hacer eso con el SDK de administración de Firebase?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Cuando tuve este problema, lo resolví con funciones en la nube. Visite este enlace para obtener más detalles https://firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens

Haz lo siguiente;

  1. Configure el servidor web con funciones de nube de firebase (si no existe)
  2. use el sdk de administración (esa es la única forma en que funcionaría este método) - [Visite este enlace] ( (https://firebase.google.com/docs/admin/setup#initialize_the_sdk ).
  3. Cree una API que reciba el uid y revoque las sesiones actuales como se especifica en el primer enlace anterior
 admin.auth().revokeRefreshTokens(uid) .then(() => { return admin.auth().getUser(uid); }) .then((userRecord) => { return new Date(userRecord.tokensValidAfterTime).getTime() / 1000; }) .then((timestamp) => { //return valid response to ios app to continue the user's login process });

Los usuarios de Voila cerraron sesión. Espero que esto te ayude a resolver el problema.

over 4 years ago · Santiago Trujillo Denunciar

0

Firebase no proporciona dicha característica. Tienes que gestionarlo tú mismo.

Aquí está el Firebase Doc y no han mencionado nada relacionado con el inicio de sesión de un solo usuario.

Esto es lo que puedes hacer para esto:

Tome un token en el nodo de usuario (donde guarda otros datos del usuario) en la base de datos de Firebase y vuelva a generarlo cada vez que inicie sesión en la aplicación. Haga coincidir este token con el token del usuario que ya ha iniciado sesión (que se guarda localmente) en appDidBecomeActive y appDidFinishLaunching o posiblemente cada uno tiempo que realiza cualquier operación con Firebase o puede ser en algún intervalo de tiempo fijo. Si los tokens son diferentes, cierre la sesión del usuario manualmente y llévelo a la pantalla de autenticación.

over 4 years ago · Santiago Trujillo Denunciar

0

Lo que he hecho es:

Se creó una colección en firestore llamada "activeSessions". El correo electrónico del usuario como una identificación para el objeto y el campo "activeID" para almacenar la identificación de la sesión más reciente.

en el código de la página de inicio de sesión:

Generando una identificación para una sesión de usuario cada vez que el usuario inicia sesión. Agregue esta identificación al almacenamiento local (debe limpiarse cada vez antes de agregar). Reemplace "activeID" por la identificación generada en la colección "activeSessions" con el correo electrónico del usuario actual.

 function addToActiveSession() { var sesID = gen(); var db = firebase.firestore(); localStorage.setItem('userID', sesID); db.collection("activeSessions").doc(firebase.auth().currentUser.email).set({ activeID: sesID }).catch(function (error) { console.error("Error writing document: ", error); }); } function gen() { var buf = new Uint8Array(1); window.crypto.getRandomValues(buf); return buf[0]; } function signin(){ firebase.auth().signInWithEmailAndPassword(email, password).then(function (user) { localStorage.clear(); addToActiveSession(); } }), function (error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; if (errorCode === 'auth/wrong-password') { alert('wrong pass'); } else { alert(errorMessage); } console.log(error); }; }

Luego, verifico en cada página si la sesión de identificación en el almacenamiento local es la misma que "activeID" en Firestore, si no, cierre la sesión.

 function checkSession(){ var db = firebase.firestore(); var docRef = db.collection("activeSessions").doc(firebase.auth().currentUser.email); docRef.get().then(function (doc) { alert(doc.data().activeID); alert(localStorage.getItem('userID')); if (doc.data().activeID != localStorage.getItem('userID')) { alert("bie bie"); firebase.auth().signOut().then(() => { window.location.href = "signin.html"; }).catch((error) => { // An error happened. }); window.location.href = "accountone.html"; } else{alert("vse ok");} }).catch(function (error) { console.log("Error getting document:", error); }); }

PD: la ventana debe actualizarse para cerrar la sesión inactiva.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda