我的问题是我的Firebase托管网站具有/account
路由,该路由会动态加载内容页面,具体取决于用户是否登录。
为了检测用户状态,我使用了Firebase Auth的onAuthStateChange
回调:
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
-Object成功,然后使用user = null
成功。
控制台页面本身加载后,控制台页面会动态加载脚本。在脚本中,还有一个onAuthStateChanged
函数,通常会调用该函数。在这里,回调仅被调用一次,user
也为空。 为什么会这样,如何解决此问题?
我无法检测到user
-Object在第二次调用时为null并在动态加载的脚本中也为null的原因。
答案 0 :(得分:0)
尝试删除()
上的handleLogout
就像logout.addEventListener(‘click’, handleLogout)