Недавно я создал простое приложение SPA, которое подключается к базе данных Firebase с помощью провайдера Google и загружает данные для аутентифицированного пользователя.
Все было замечательно, пока я не попытался выйти из системы, используя следующий метод из документации:
firebase.auth().signOut()
Выход был успешным, но после этого я не могу войти снова, потому что я получаю следующую ошибку:
updateCurrentUser не удалось: первый аргумент «пользователь» должен быть экземпляром пользователя Firebase или нулевым.
Когда я проверял вкладку сети в своем браузере, я видел мои пользовательские данные в ответах, поэтому возникла проблема с firebasewebui.
Вещи, которые я тоже попробовал
- Войти в другой браузер - работает
- Вход в режиме инкогнито - не работает
- Вход из другого домена (например, поддельный домен, авторизованный в консоли firebase) - работает
- Вытер весь мой профиль Google Chrome с компьютера и добавил его снова - не работает
- Вход из приложения Android - работает (здесь нет проблем с выходом из системы и входом в систему)
Похоже, это что-то связанное с комбинацией домена и браузера.
Вот мой код 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, не запускается.