Firebase Auth导入UserMetadata报错 无法获取lastSignInTime属性
问题原因
你遇到的导入错误是因为UserMetadata不是@firebase/auth包对外导出的可直接导入的实体,它只是TypeScript类型定义,用来描述用户实例下元数据字段的结构,同时你尝试直接访问UserMetadata.lastSignInDate的写法也不对,该属性是绑定在具体登录用户实例上的属性,不是全局静态属性。
解决步骤
- 第一步:删除导入语句中的
UserMetadata,修正导入代码为:
import { getAuth } from '@firebase/auth'
- 第二步:通过已登录的用户实例获取元数据,你已经引入了
useAuth上下文钩子,正常来说该钩子会返回当前登录的currentUser对象,你可以直接从该对象的metadata属性中拿到lastSignInTime,示例代码如下:
const Trainings = () => { const { currentUser } = useAuth() const firebaseConfig = { // 你的配置项 } const app = initializeApp(firebaseConfig) const db = getFirestore(app); const auth = getAuth(app); // 要先判断用户是否登录,避免空值报错 useEffect(() => { if(currentUser) { console.log(currentUser.metadata.lastSignInTime) } }, [currentUser]) // 其余逻辑代码 }
- 如果你没有从
useAuth中拿到currentUser,也可以通过auth实例监听登录状态获取:
useEffect(() => { const unsubscribe = onAuthStateChanged(auth, (user) => { if (user) { console.log(user.metadata.lastSignInTime) } }) // 组件卸载时取消监听 return () => unsubscribe() }, [auth])
注意:不要在组件顶层直接初始化Firebase应用,避免重复初始化报错,建议把Firebase初始化逻辑抽离到单独的配置文件中,全局只初始化一次。
内容的提问来源于stack exchange,提问作者Juls
相关产品推荐
相关产品推荐

