【发布时间】:2021-02-19 13:32:59
【问题描述】:
我正在尝试为我的 react 应用程序构建 firebase 身份验证。登录后,我尝试更新 displayName,然后重定向。在重定向页面上,我尝试通过获取同时保存的显示名称来问候用户使用 firebase 注册..此页面在我重定向后立即正常工作,但如果我重新加载此页面,则它无法显示 displayName 并引发此错误:
TypeError: 无法读取 null 的属性“displayName”
这是点击注册按钮时触发的功能..
const signup = async () => {
try{
await firebaseApp.auth().createUserWithEmailAndPassword(email, password)
await firebaseApp.auth().currentUser.updateProfile({displayName:username})
console.log(firebaseApp.auth().currentUser)
if (!firebaseApp.auth().currentUser){
setLoading(true)
}
history.push('/home')
}catch (error){
alert(error.message)
}
}
这是注册页面重定向到的页面的 JSX:
<div className="greetings">
Good Evening {firebaseApp.auth().currentUser.displayName}
</div>
为什么会出现这个问题以及如何解决?
【问题讨论】:
-
firebaseApp.auth().currentUser可能需要一些时间来解决,因此在评估时,它可能仍在解决过程中。而是订阅onAuthStateChanged 并更新状态,因为该挂钩会发出包括用户信息在内的身份验证值。在某个顶级组件上订阅它,并通过 props、上下文、redux 或任何您想要的机制向下传递用户值。这不仅仅是 firebase 的事情,任何异步操作都会发生这种情况。
标签: javascript reactjs firebase firebase-authentication