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 comme il s'est déjà connecté, la fenêtre contextuelle se ferme sans nécessiter d'interaction de la part de l'utilisateur. Existe-t-il un moyen de vérifier s'il y a déjà un utilisateur connecté avant d'afficher le popup?
javascript
web
firebase
firebase-authentication
Jophin Joseph
la source
la source
onAuthStateChanged
. Cela a été ajouté dans la version 4.6.0: firebase.google.com/support/release-notes/js#4.6.0 Vous pouvez l'obtenir à partir de la méthode decurrentUser.metadata
connexion ou de (dernière connexion et heure de création) ...Vous pouvez également vérifier s'il existe un utilisateur actuel
la source
Il n'est pas possible de dire si un utilisateur sera signé lorsqu'une page commence à se charger, il y a cependant un contournement.
Ensuite, lorsque la page commence à se charger, vous pouvez supposer avec optimisme que l'utilisateur se reconnectera automatiquement et reporter la boîte de dialogue jusqu'à ce que vous soyez sûr (c'est-à-dire après les
onAuthStateChanged
incendies). Sinon, si lalocalStorage
clé est vide, vous pouvez afficher la boîte de dialogue immédiatement.L'
onAuthStateChanged
événement Firebase se déclenchera environ 2 secondes après le chargement d'une page.J'utilise ceci avec React et react-router . J'ai mis le code ci-dessus dans
componentDidMount
mon composant racine d'application. Là, dans le rendu, j'en aiPrivateRoutes
Et voici comment ma PrivateRoute est implémentée:
la source
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:
Pour ceux qui sont confrontés au problème du "retour de null", c'est simplement parce que vous n'attendez pas que l'appel Firebase se termine.
Supposons que vous exécutiez l'action de connexion sur la page A, puis que vous invoquiez la page B, sur la page B, vous pouvez appeler le code JS suivant pour tester le comportement attendu:
Si l'utilisateur est connecté, alors "var user" contiendra la charge utile JSON attendue, sinon, alors ce sera simplement "null"
Et c'est tout ce dont vous avez besoin.
Cordialement
la source
firebase.auth.currentUser
renvoie indéfini si je suis connecté ou non. Seul auth () renvoie le résultat correct une fois connecté.Une autre manière est d'utiliser la même chose que celle utilisée par Firebase.
Par exemple, lorsque l'utilisateur se connecte, Firebase stocke les détails ci-dessous dans le stockage local. Lorsque l'utilisateur revient sur la page, Firebase utilise la même méthode pour identifier si l'utilisateur doit être connecté automatiquement.
ATTN: car cela n'est ni répertorié ni recommandé par Firebase. Vous pouvez appeler cette méthode une manière non officielle de faire cela. Ce qui signifie que plus tard, si Firebase modifie son fonctionnement interne, cette méthode peut ne pas fonctionner. Ou en bref. À utiliser à vos risques et périls! :)
la source
Cela marche:
la source
Si vous autorisez les utilisateurs anonymes ainsi que ceux connectés par e-mail, vous pouvez utiliser
firebase.auth().currentUser.isAnonymous
, qui renverra soittrue
oufalse
.la source
utiliser
Firebase.getAuth()
. Il renvoie l'état actuel du client Firebase. Sinon, la valeur de retour estnull
Voici la documentation: https://www.firebase.com/docs/web/api/firebase/getauth.htmlla source
firebase.getAuth()
Importez d'abord les éléments suivants
ensuite
la source