Saya menggunakan api node firebase di file javascript saya untuk login Google.
firebase.initializeApp(config);
let provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
Ini berfungsi dengan baik dan pengguna dapat masuk dengan kredensial Google-nya. Saat pengguna mengunjungi halaman itu lagi, pop-up akan terbuka lagi tetapi karena dia sudah login, pop-up tersebut menutup tanpa memerlukan interaksi apa pun dari pengguna. Apakah ada cara untuk memeriksa apakah sudah ada pengguna yang login sebelum meminta popup?
javascript
web
firebase
firebase-authentication
Jophin Joseph
sumber
sumber
onAuthStateChanged
. Ini ditambahkan di 4.6.0: firebase.google.com/support/release-notes/js#4.6.0 Anda bisa mendapatkannya dari metode masuk atau daricurrentUser.metadata
(waktu masuk terakhir dan waktu pembuatan) ...Anda juga dapat memeriksa apakah ada currentUser
sumber
Tidak mungkin untuk mengetahui apakah pengguna akan masuk ketika halaman mulai memuat, ada solusi meskipun.
Kemudian, saat halaman mulai memuat, Anda dapat secara optimis mengasumsikan bahwa pengguna akan masuk kembali secara otomatis dan menunda dialog sampai Anda dapat yakin (yaitu setelah
onAuthStateChanged
diaktifkan). Jika tidak, jikalocalStorage
kuncinya kosong, Anda dapat langsung menampilkan dialog.Peristiwa firebase
onAuthStateChanged
akan aktif sekitar 2 detik setelah halaman dimuat.Saya menggunakan ini dengan React dan react-router . Saya memasukkan kode di atas ke
componentDidMount
dalam komponen root Aplikasi saya. Di sana, dalam render, saya punya beberapaPrivateRoutes
Dan inilah cara PrivateRoute saya diterapkan:
sumber
Tidak perlu menggunakan fungsi onAuthStateChanged () dalam skenario ini.
Anda dapat dengan mudah mendeteksi apakah pengguna masuk atau tidak dengan menjalankan:
Bagi mereka yang menghadapi masalah "mengembalikan null", itu hanya karena Anda tidak menunggu panggilan firebase selesai.
Misalkan Anda melakukan tindakan login pada Halaman A dan kemudian Anda memanggil Halaman B, di Halaman B Anda dapat memanggil kode JS berikut untuk menguji perilaku yang diharapkan:
Jika pengguna login maka "var user" akan berisi payload JSON yang diharapkan, jika tidak, maka hanya "null"
Dan hanya itu yang Anda butuhkan.
Salam
sumber
firebase.auth.currentUser
pengembalian tidak ditentukan apakah saya masuk atau tidak. Hanya auth () yang mengembalikan hasil yang benar saat masuk.Cara lainnya adalah menggunakan hal yang sama dengan yang digunakan firebase.
Misalnya saat pengguna masuk, firebase menyimpan detail di bawah ini di penyimpanan lokal. Saat pengguna kembali ke halaman, firebase menggunakan metode yang sama untuk mengidentifikasi apakah pengguna harus login secara otomatis.
PERHATIAN: Karena ini tidak terdaftar atau direkomendasikan oleh firebase. Anda dapat menyebut metode ini sebagai cara tidak resmi untuk melakukan ini. Yang berarti nanti jika firebase mengubah kerja dalamnya, metode ini mungkin tidak berfungsi. Atau singkatnya. Gunakan dengan resiko Anda sendiri! :)
sumber
Ini bekerja:
sumber
Jika Anda mengizinkan pengguna anonim serta mereka yang masuk dengan email, Anda dapat menggunakan
firebase.auth().currentUser.isAnonymous
, yang akan mengembalikantrue
ataufalse
.sumber
gunakan
Firebase.getAuth()
. Ini mengembalikan status klien Firebase saat ini. Jika tidak, nilai kembaliannya adalah.null
Berikut dokumentasinya: https://www.firebase.com/docs/web/api/firebase/getauth.htmlsumber
firebase.getAuth()
Impor pertama yang berikut ini
Kemudian
sumber