我在我的React应用中使用Firebase Auth,当一个新用户注册时,他的displayName不会显示在UI上,即使它在服务器中更新了,即使电子邮件和其他所有东西都显示在UI上,就像UI在displayName更新之前加载一样。
有人能帮我解决这个问题吗?
useEffect(
() =>
onAuthStateChanged(firebaseAuth, (user) => {
if (user) {
dispatch({
type: LOGIN,
payload: {
isLoggedIn: true,
user: {
id: user.uid,
email: user.email,
displayName: user.displayName,
emailVerified: user.emailVerified
}
}
});
} else {
dispatch({
type: LOGOUT
});
}
}),
// eslint-disable-next-line react-hooks/exhaustive-deps
[dispatch]
);
const firebaseRegister = async (displayName, email, password) => {
await createUserWithEmailAndPassword(firebaseAuth, email, password).then((registeredUser) => {
sendEmailVerification(firebaseAuth.currentUser);
addDoc(collection(db, 'users'), {
uid: registeredUser.user.uid,
displayName,
email,
createdAt: serverTimestamp()
});
});
console.log(firebaseAuth.currentUser);
const user = firebaseAuth.currentUser;
await updateProfile(user, { displayName })
.then(() => {
user.reload().then(() => console.log('Profile reloaded'));
})
.catch((err) => console.log(err));
};
1条答案
按热度按时间hgncfbus1#
您应该在更新配置文件后重新加载您的用户数据:
建议迁移到firebase v9。
更新日期:
为了在UI中显示更新的用户数据,您应该将其保存在一个状态中,而不是直接使用auth.currentUser,因为当currentUser得到更新时,您的组件不会再次呈现,因为它不是组件中的状态:
x一个一个一个一个x一个一个二个一个x一个一个三个一个