Firebase v9 创建用户后auth.currentUser为null 无法调用updateProfile
问题解决方法
核心错误原因
createUserWithEmailAndPassword是异步方法,返回Promise对象,你没有加await关键字等待该方法执行完成,代码就直接向下执行读取projectAuth.currentUser,此时用户注册请求还没处理完,全局的用户状态自然还是null。
优化修正方案
除了补全await,更推荐直接使用createUserWithEmailAndPassword返回结果中的用户对象调用updateProfile,不需要依赖全局的projectAuth.currentUser,可以避免全局状态同步延迟的偶发问题,原本多余导入的getAuth也可以直接移除。
修正后完整代码
import { ref } from "vue" import { projectAuth } from '../firebase/config' import { createUserWithEmailAndPassword, updateProfile } from 'firebase/auth' const error = ref(null) const isPending = ref(false) const signup = async(email, password, displayName) => { error.value = null isPending.value = true try { // 补全await等待注册请求完成 const res = await createUserWithEmailAndPassword(projectAuth, email, password) if (!res) { throw new Error('Could not complete the signup') } // 直接用返回结果里的user对象,不依赖全局currentUser await updateProfile(res.user, {displayName}) error.value = null isPending.value = false return res } catch(err) { console.log('ERROR: ' + err.message) error.value = err.message isPending.value = false } } const useSignup = () => { return {error, signup, isPending} } export default useSignup
内容的提问来源于stack exchange,提问作者Jammooly
相关产品推荐
相关产品推荐

