我有一个问题,我的防火墙托管网站有一个/account路径,动态加载内容页,这取决于用户是否登录。为了检测用户状态,我使用了firebase的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也是空的。为什么会这样,我如何解决这个问题?I无法检测为什么在第二个调用时user-Object为空,在动态加载的脚本中也为null。
发布于 2019-02-24 12:07:19
尝试在您的()上删除handleLogout,使其类似于logout.addEventListener(‘click’, handleLogout)
https://stackoverflow.com/questions/54851216
复制相似问题