即使控制台显示firebase displayName已在数据库中成功更新,但UI上的firebase displayName未更新

lf3rwulv  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(113)

我在我的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));
};
hgncfbus

hgncfbus1#

您应该在更新配置文件后重新加载您的用户数据:

user.updateProfile({ displayName }).then(() => {
  user.reload().then(() => {
    console.log('Profile reloaded');
  });
}).catch((error) => {
  console.log(error);
});

建议迁移到firebase v9。
更新日期:

为了在UI中显示更新的用户数据,您应该将其保存在一个状态中,而不是直接使用auth.currentUser,因为当currentUser得到更新时,您的组件不会再次呈现,因为它不是组件中的状态:
x一个一个一个一个x一个一个二个一个x一个一个三个一个

相关问题