Ich verwende die Firebase-Knoten-API in meinen Javascript-Dateien für die Google-Anmeldung.
firebase.initializeApp(config);
let provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
Dies funktioniert einwandfrei und der Nutzer kann sich mit seinen Google-Anmeldeinformationen anmelden. Wenn der Benutzer die Seite erneut besucht, wird das Popup erneut geöffnet. Da er sich jedoch bereits angemeldet hat, wird das Popup geschlossen, ohne dass der Benutzer interagieren muss. Gibt es eine Möglichkeit zu überprüfen, ob bereits ein Benutzer angemeldet ist, bevor das Popup angezeigt wird?
javascript
web
firebase
firebase-authentication
Jophin Joseph
quelle
quelle
onAuthStateChanged
. Dies wurde in 4.6.0 hinzugefügt: firebase.google.com/support/release-notes/js#4.6.0 Sie können es von der Anmeldemethode oder voncurrentUser.metadata
(letzte Anmeldezeit und Erstellungszeit) abrufen ...Sie können auch überprüfen, ob ein aktueller Benutzer vorhanden ist
quelle
Es ist nicht möglich zu sagen , ob ein Benutzer wird unterzeichnet werden , wenn ein Laden der Seite beginnt, gibt es eine Arbeit um , obwohl ist.
Wenn die Seite geladen wird, können Sie optimistisch davon ausgehen, dass der Benutzer automatisch neu angemeldet wird, und den Dialog verschieben, bis Sie sicher sind (dh nach einem
onAuthStateChanged
Brand). AndernfallslocalStorage
können Sie den Dialog sofort anzeigen, wenn der Schlüssel leer ist.Das Firebase-
onAuthStateChanged
Ereignis wird ungefähr 2 Sekunden nach dem Laden der Seite ausgelöst.Ich benutze dies mit React und React -Router . Ich habe den obigen Code in
componentDidMount
meine App-Stammkomponente eingefügt. Dort im Render habe ich welchePrivateRoutes
Und so wird meine PrivateRoute implementiert:
quelle
In diesem Szenario muss die Funktion onAuthStateChanged () nicht verwendet werden.
Sie können leicht feststellen, ob der Benutzer angemeldet ist oder nicht, indem Sie Folgendes ausführen:
Für diejenigen, die mit dem Problem der "Rückgabe von Null" konfrontiert sind, liegt dies nur daran, dass Sie nicht auf den Abschluss des Firebase-Aufrufs warten.
Angenommen, Sie führen die Anmeldeaktion auf Seite A aus und rufen dann Seite B auf. Auf Seite B können Sie den folgenden JS-Code aufrufen, um das erwartete Verhalten zu testen:
Wenn der Benutzer protokolliert ist, enthält "var user" die erwartete JSON-Nutzlast. Wenn nicht, ist sie nur "null".
Und das ist alles was du brauchst.
Grüße
quelle
firebase.auth.currentUser
Retouren undefiniert, ob ich angemeldet bin oder nicht. Nur auth () gibt das richtige Ergebnis zurück, wenn ich angemeldet bin.Eine andere Möglichkeit besteht darin, dasselbe zu verwenden, was Firebase verwendet.
Wenn sich der Benutzer beispielsweise anmeldet, speichert Firebase die folgenden Details im lokalen Speicher. Wenn der Benutzer zur Seite zurückkehrt, verwendet Firebase dieselbe Methode, um festzustellen, ob der Benutzer automatisch angemeldet werden soll.
ATTN: Da dies von Firebase weder aufgeführt noch empfohlen wird. Sie können diese Methode als inoffizielle Methode bezeichnen. Das heißt, später, wenn Firebase ihre innere Arbeitsweise ändert, funktioniert diese Methode möglicherweise nicht. Oder kurz gesagt. Benutzung auf eigene Gefahr! :) :)
quelle
Das funktioniert:
quelle
Wenn Sie sowohl anonyme als auch mit E-Mail angemeldete Benutzer zulassen, können Sie diese verwenden
firebase.auth().currentUser.isAnonymous
, die entwedertrue
oder zurückgebenfalse
.quelle
verwenden
Firebase.getAuth()
. Es gibt den aktuellen Status des Firebase-Clients zurück. Andernfalls lautet der Rückgabewert.null
Hier sind die Dokumente: https://www.firebase.com/docs/web/api/firebase/getauth.htmlquelle
firebase.getAuth()
Importieren Sie zuerst Folgendes
Dann
quelle