Używam interfejsu API węzła Firebase w moich plikach javascript do logowania się w Google.
firebase.initializeApp(config);
let provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
Działa to dobrze, a użytkownik może zalogować się przy użyciu swoich danych logowania Google. Gdy użytkownik ponownie odwiedza stronę, wyskakujące okienko otwiera się ponownie, ale ponieważ jest już zalogowany, wyskakujące okienko zamyka się bez konieczności jakiejkolwiek interakcji ze strony użytkownika. Czy istnieje sposób, aby sprawdzić, czy jest już zalogowany użytkownik przed wyświetleniem monitu o wyskakujące okienko?
javascript
web
firebase
firebase-authentication
Jophin Joseph
źródło
źródło
onAuthStateChanged
. To zostało dodane w 4.6.0: firebase.google.com/support/release-notes/js#4.6.0 Możesz to pobrać z metody logowania lub zcurrentUser.metadata
(czas ostatniego logowania i utworzenia) ...Możesz również sprawdzić, czy istnieje currentUser
źródło
Nie można stwierdzić, czy użytkownik zostanie podpisany, gdy strona zacznie się ładować, jednak istnieje obejście.
Następnie, gdy strona zacznie się ładować, możesz optymistycznie założyć, że użytkownik zostanie automatycznie ponownie zalogowany i odłóż okno dialogowe, aż będziesz mieć pewność (tj. Po
onAuthStateChanged
pożarach). W przeciwnym razie, jeślilocalStorage
klucz jest pusty, możesz od razu wyświetlić okno dialogowe.onAuthStateChanged
Zdarzenie Firebase zostanie uruchomione po około 2 sekundach od załadowania strony.Używam tego z React i React -routerem . Umieściłem powyższy kod w
componentDidMount
moim głównym składniku aplikacji. Tam, w renderowaniu, mam trochęPrivateRoutes
I tak jest zaimplementowana moja PrivateRoute:
źródło
W tym scenariuszu nie ma potrzeby używania funkcji onAuthStateChanged ().
Możesz łatwo wykryć, czy użytkownik jest zalogowany, czy nie, wykonując:
Dla tych, którzy borykają się z problemem „zwracającego null”, dzieje się tak tylko dlatego, że nie czekasz na zakończenie połączenia z bazą firebase.
Załóżmy, że wykonujesz akcję logowania na stronie A, a następnie wywołujesz stronę B, na stronie B możesz wywołać następujący kod JS, aby przetestować oczekiwane zachowanie:
Jeśli użytkownik jest zalogowany, „var user” będzie zawierał oczekiwany ładunek JSON, jeśli nie, to będzie po prostu „null”
I to wszystko, czego potrzebujesz.
pozdrowienia
źródło
firebase.auth.currentUser
zwraca wartość undefined, czy nie jestem tylko po zalogowaniu auth () zwraca poprawny wynik po zalogowaniu się..Innym sposobem jest użycie tego samego, czego używa Firebase.
Na przykład, gdy użytkownik się loguje, Firebase przechowuje poniższe szczegóły w pamięci lokalnej. Gdy użytkownik wraca na stronę, Firebase używa tej samej metody, aby określić, czy użytkownik powinien zalogować się automatycznie.
UWAGA: ponieważ nie jest to wymienione ani zalecane przez firebase. Możesz nazwać tę metodę nieoficjalnym sposobem robienia tego. Co oznacza, że później, jeśli firebase zmieni swoje wewnętrzne działanie, ta metoda może nie działać. Krótko mówiąc. Używaj na własne ryzyko! :)
źródło
To działa:
źródło
Jeśli pozwalasz anonimowych, jak i tych, zalogować się za pomocą poczty elektronicznej można użyć
firebase.auth().currentUser.isAnonymous
, który powróci albotrue
albofalse
.źródło
używać
Firebase.getAuth()
. Zwraca aktualny stan klienta Firebase. W przeciwnym razie zwracana wartość tonull
Oto dokumenty: https://www.firebase.com/docs/web/api/firebase/getauth.htmlźródło
firebase.getAuth()
Najpierw zaimportuj następujące elementy
Następnie
źródło