首页 > 解决方案 > Firebase 在登录后注销用户

问题描述

我的问题是我的 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 在第二次调用时为空,并且在动态加载的脚本中也为空。

标签: javascriptfirebaseauthenticationwebfirebase-authentication

解决方案


尝试删除()你的handleLogout 所以它会像logout.addEventListener(‘click’, handleLogout)


推荐阅读