Я использую api узла firebase в своих файлах javascript для входа в Google.
firebase.initializeApp(config);
let provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
Это работает нормально, и пользователь может войти в систему со своими учетными данными Google. Когда пользователь снова посещает страницу, всплывающее окно открывается снова, но, поскольку он уже вошел в систему, всплывающее окно закрывается, не требуя какого-либо взаимодействия со стороны пользователя. Есть ли способ проверить, есть ли уже вошедший в систему пользователь, прежде чем запрашивать всплывающее окно?
javascript
web
firebase
firebase-authentication
Иофин Джозеф
источник
источник
onAuthStateChanged
. Это был добавлен в 4.6.0: firebase.google.com/support/release-notes/js#4.6.0 Вы можете получить его от входа в методе илиcurrentUser.metadata
(последний знак времени и времени создания) ...Вы также можете проверить, есть ли текущий пользователь
источник
Это не возможно сказать , является ли пользователь будет быть подписан , когда страница начинается загрузка, есть работа вокруг , хотя.
Затем, когда страница начинает загружаться, вы можете оптимистично предположить, что пользователь будет повторно авторизован автоматически, и отложить диалог до тех пор, пока вы не будете уверены (например, после
onAuthStateChanged
пожаров). В противном случае, еслиlocalStorage
ключ пуст, вы можете сразу показать диалог.onAuthStateChanged
Событие firebase срабатывает примерно через 2 секунды после загрузки страницы.Я использую это с React и response-router . Я поместил приведенный выше код в
componentDidMount
свой корневой компонент приложения. Там, на рендере, у меня естьPrivateRoutes
И вот как реализован мой PrivateRoute:
источник
В этом сценарии нет необходимости использовать функцию onAuthStateChanged ().
Вы можете легко определить, вошел ли пользователь в систему или нет, выполнив:
Для тех, кто сталкивается с проблемой «возврата нуля», это просто потому, что вы не ждете завершения вызова firebase.
Предположим, вы выполняете действие входа в систему на странице A, а затем вызываете страницу B, на странице B вы можете вызвать следующий код JS для проверки ожидаемого поведения:
Если пользователь зарегистрирован, то «var user» будет содержать ожидаемую полезную нагрузку JSON, если нет, то это будет просто «null»
И это все, что вам нужно.
С уважением
источник
firebase.auth.currentUser
возвращает undefined независимо от того, вошел ли я в систему или нет. Только auth () возвращает правильный результат, когдаЭто работает:
источник
Еще один способ - использовать то же самое, что и firebase.
Например, когда пользователь входит в систему, firebase сохраняет указанные ниже данные в локальном хранилище. Когда пользователь возвращается на страницу, firebase использует тот же метод, чтобы определить, должен ли пользователь входить в систему автоматически.
ВНИМАНИЕ: так как это не указано и не рекомендовано firebase. Вы можете назвать этот метод неофициальным способом сделать это. Это означает, что позже, если firebase изменит свою внутреннюю работу, этот метод может не работать. Или короче. Используйте на свой риск! :)
источник
Если вы разрешаете анонимным пользователям, а также тех, кто вошел в систему по электронной почте, вы можете использовать
firebase.auth().currentUser.isAnonymous
, что вернет либоtrue
илиfalse
.источник
использовать
Firebase.getAuth()
. Возвращает текущее состояние клиента Firebase. В противном случае возвращаемое значение:null
Вот документы: https://www.firebase.com/docs/web/api/firebase/getauth.htmlисточник
firebase.getAuth()
Сначала импортируйте следующие
затем
источник