我有这个 firebase.js 文件:
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
const firebaseConfig = {...};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
import { getAuth, onAuthStateChanged } from "firebase/auth";
export const auth = getAuth(app);
export let uid = null;
onAuthStateChanged(auth, (user) => {
if (user) {
uid = user.uid;
} else {
uid = null;
}
});
在我一直在尝试做的另一个功能中:
import {uid, auth} from "./firebase.js";
if (auth.currentUser)
或
if (uid)
但是,这两种方法都不能始终如一地工作。签名后,用户将存在,但页面重新加载后,它们会再次消失。这是检查用户是否登录的正确方法吗?
onAuthStateChanged
是异步的,不会立即发出回调。 页面初始加载后,回调验证用户是否确实已登录并经过验证之前,可能需要一段时间。
当您说用户“disappeasr”时,您可能试图在回调发生之前立即观察页面加载时的登录状态,这根本不会按照您期望的方式工作。 您需要等待第一个回调的结果才能知道用户何时登录,并继续侦听未来的回调以了解是否以及何时发生变化。