web-dev-qa-db-fra.com

Comment détecter si un utilisateur est déjà connecté à Firebase?

J'utilise l'api du nœud firebase dans mes fichiers javascript pour la connexion à Google.

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

Cela fonctionne bien et l'utilisateur peut se connecter avec ses informations d'identification Google. Lorsque l'utilisateur visite à nouveau la page, la fenêtre contextuelle s'ouvre à nouveau, mais puisqu'il est déjà connecté, la fenêtre contextuelle se ferme sans nécessiter d'interaction de l'utilisateur. Existe-t-il un moyen de vérifier s’il existe déjà un utilisateur connecté avant d’afficher la fenêtre contextuelle?

69
Jophin Joseph

https://firebase.google.com/docs/auth/web/manage-users

Vous devez ajouter un observateur de changement d'état d'authentification.

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});
75
bojeil

Vous pouvez également vérifier s'il y a un currentUser

var user = firebase.auth().currentUser;

if (user) {
  // User is signed in.
} else {
  // No user is signed in.
}
60
Passos

Il n'est pas nécessaire d'utiliser la fonction onAuthStateChanged () dans ce scénario.

Vous pouvez facilement détecter si l'utilisateur est connecté ou non en exécutant:

var user = firebase.auth().currentUser;

Pour ceux qui sont confrontés au problème "return null", c'est simplement parce que vous n'attendez pas que l'appel de Firebase soit terminé.

Supposons que vous exécutiez l'action de connexion sur la page A, puis que vous appeliez la page B; sur la page B, vous pouvez appeler le code JS suivant pour tester le comportement attendu:

  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 l'utilisateur est connecté, "var user" contiendra la charge JSON attendue, sinon ce sera simplement "null"

Et c'est tout ce dont vous avez besoin.

Cordialement

12
Daniel Vukasovich

Une autre façon consiste à utiliser la même chose que firebase.

Par exemple, lorsque l'utilisateur se connecte, Firebase stocke les détails ci-dessous dans un stockage local. Lorsque l'utilisateur revient à la page, firebase utilise la même méthode pour déterminer si l'utilisateur doit être connecté automatiquement.

enter image description here

ATTN: Comme cela n’est ni répertorié ni recommandé par firebase. Vous pouvez appeler cette méthode de manière non officielle. Ce qui signifie plus tard si firebase change leur fonctionnement interne, cette méthode risque de ne pas fonctionner. Ou en bref. À utiliser à vos risques et périls! :)

2
ravish.hacker