我最近制作了一个简单的SPA应用程序,该应用程序使用Google提供程序连接到Firebase并为经过身份验证的用户加载数据。 一切都很棒,直到我尝试使用文档中的以下方法注销用户:
firebase.auth().signOut()
注销成功,但是在此之后,由于收到以下错误,我无法再次登录:
updateCurrentUser失败:第一个参数“ user”必须是Firebase User的实例或为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中注册的观察者。
答案 0 :(得分:0)
我自己找到了答案。 有几个问题。首先,应将Firebase初始化放置为“全局”,例如:https://github.com/firebase/firebaseui-web/,尤其是以下几行:
firebase.initializeApp(config);
ui = new firebaseui.auth.AuthUI(firebase.auth());
第二,使用输入的代码,我必须使用条件获取ui的现有实例。在firebase github中,始终使用new运算符创建ui,并且每次脚本运行时始终创建一次。 我发现,有一种解决方法-可以使用delete()promise删除ui实例。