Условие
$ npm install --save firebase@4.11.0
Issue
Я использую проверку подлинности firebase в своем веб-приложении.В моем приложении я реализовал onAuthStateChanged
для js на стороне клиента, как показано ниже.
firebase.auth().onAuthStateChanged((user) => {
if(user) {
//logged in
} else {
//do sth
}
});
После входа в систему я подтвердил, что этот метод вернет фактическое значение пользователя obj, но если я обновлю страницу, то пользователь может быть пустым,Любопытно, что иногда пользователь не будет нулевым.Боюсь, что есть некоторые ограничения для вызова onAuthStateChanged, но в настоящее время я понятия не имею.
Как мне решить эту проблему?
update
Позвольте мне поделиться своимминимальный пример.
Мое приложение работает с express.js.Есть два URL, как показано ниже./login
/main
На странице входа в систему я реализовал метод аутентификации.Если вход успешно завершен, пользователь будет перенаправлен на «/main».
//login.js
import firebase from 'firebase';
var config = {...};
firebase.initializeApp(config);
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider)
.then((result) => {
return result.user.getIdToken(true);
}).then((idToken) => {
if(idToken) {
location.href = '/main';
}
});
На главной странице нет способа входа.main.js только проверяет, вошел ли пользователь в систему.
//main.js
import firebase from 'firebase';
var config = {...};
firebase.initializeApp(config);
firebase.auth().onAuthStateChanged((user) => {
if (user) {
//initialize main page.
} else {
location.href = '/login';
}
}
Я думаю, что статус входа хранится в LocalStorage веб-браузера.Это означает, что после завершения загрузки main.js onAuthStateChanged будет автоматически запущен с информацией о пользователе, но не будет работать, как я ожидал.Я уверен, что сохраняем регистрационные данные правильно, потому что в официальном документе сказано, что по умолчанию для веб-клиента установлено значение LOCAL
.
https://firebase.google.com/docs/auth/web/auth-state-persistence
мой вопрос
СледуетЯ реализую на AuthStateChanged другим способом?Как я могу убедиться, что пользователь вошел в систему после перезагрузки?
например
import $ from 'jquery';
$(document).on('ready', () => {
onAuthStateChanged((user) => {...});
});
Или вы могли бы показать мне правильный путь?
Временное решение
Iрешил удалить сеанс и установить перенаправление на страницу входа, если возвращается ноль.Это не решение, а обходной путь в настоящее время ...