У меня проблема с тем, что на моем веб-сайте Firebase есть маршрут /account
, который динамически загружает контентную страницу, в зависимости от того, вошел ли пользователь в систему или нет.Для определения состояния пользователей я использую обратный вызов onAuthStateChange
от firebase auth:
firebase.auth().onAuthStateChanged((user) => {
console.log("authstate changed:"+user);
let pagereq = new XMLHttpRequest();
if (user) {
console.log(user.email);
user.getIdTokenResult(true).then((idtokenres) => {
if(idtokenres.claims.admin){
console.log("user is admin");
}
});
pagereq.open("GET","./account-management/management.html",true);
logout.addEventListener("click",handleLogout());
} else {
logout.parentNode.removeChild(logout);
pagereq.open("GET","./account-management/login/login-page.html",true);
}
}
Когда пользователь вошел в систему в динамически загруженной форме входа, появляется и позволяет войти с помощью электронной почты и пароля.Теперь пользователь вводит свои учетные данные и нажимает кнопку «войти».Область содержимого перезагружается из-за обратного вызова и показывает страницу консоли.Здесь возникает проблема.Когда пользователь входит в систему, onAuthStateChanged
вызывается дважды: первый - с точным user
-объектом, а второй - с user = null
.Страница консоли динамически загружает скрипт после загрузки самой страницы консоли.В скрипте также есть функция onAuthStateChanged
, которая будет вызываться нормально.Здесь обратный вызов вызывается только один раз, и user
также является нулевым. Почему и как я могу обойти эту проблему? Не удается определить, почему user
-Object нулевой при втором вызове, а также нулевой в динамически загружаемом скрипте.