Firebase - SPA Web 应用程序 - 注销问题

Firebase - SPA web application - issue with logout

我最近制作了一个简单的 SPA 应用程序,它使用 Google 提供程序连接到 firebase 并为经过身份验证的用户加载数据。 一切都很好,直到我尝试使用文档中的以下方法注销用户:

firebase.auth().signOut()

注销成功,但之后,我无法再次登录,因为我收到以下错误:

updateCurrentUser failed: First argument "user" must be an instance of Firebase User or null.

当我在浏览器中检查网络选项卡时,我在响应中看到了我的用户数据,因此 firebasewebui 可能存在问题。

我也试过的东西

所以它看起来像是与域和浏览器组合有关的东西。

这是我的js代码:

const firebase = require('firebase/app');
require('firebase/auth');
require('firebaseui');

const initializeFirebase = () => {
    const config = { /* config */ };

    firebase.initializeApp(config);

    firebase.auth().onAuthStateChanged(function (user) {
        if (user) {
            // loads data
        } else {
            // visibility staff
            initializeFirebaseAuthForm();
        }
    });
}

const initializeFirebaseAuthForm = () => {
    const uiConfig = {
        callbacks: {
            signInSuccessWithAuthResult: function (authResult, redirectUrl) {
                return false;
            },
            uiShown: function () {
                visibilityManager(false);
            }
        },
        signInFlow: 'popup',
        signInOptions: [
            firebase.auth.GoogleAuthProvider.PROVIDER_ID
        ]
    };

    let ui = null;
    if (firebaseui.auth.AuthUI.getInstance()) {
        ui = firebaseui.auth.AuthUI.getInstance();
    } else {
        ui = new firebaseui.auth.AuthUI(firebase.auth());
    }
    ui.start('#firebaseui-auth-container', uiConfig);
}

document.addEventListener('DOMContentLoaded', function () {
    initializeFirebase();
});

在这种情况下,我在 onAuthStateChanged 中注册的观察者不会被触发。

我自己找到了答案。 有几个问题。首先,Firebase 初始化应放置为 'global',例如此处:https://github.com/firebase/firebaseui-web/,尤其是这一行:

firebase.initializeApp(config);
ui = new firebaseui.auth.AuthUI(firebase.auth());

其次,使用我的输入代码,我必须使用条件获取 ui 的现有实例。在 firebase github 中,ui 始终使用 new 运算符创建,并且始终在每个脚本 运行 中创建一次。 我发现有解决方法 - ui 可以使用 delete() promise 删除实例。