Firebase创建用户时如何添加displayName、手机号等用户信息
Firebase创建用户后补充displayName、手机号等信息的实现方案
createUserWithEmailAndPassword 方法创建用户时,默认只会在Firebase Auth用户表中写入uid、邮箱、密码哈希、账号创建时间等基础字段,其他信息需要调用对应API补充,不同类型的信息处理逻辑不一样:
1. 不同字段的更新规则
- 可直接更新的内置字段:
displayName(展示名)、photoURL(头像链接),调用updateProfile方法即可写入,不需要额外验证。 - 手机号(
phoneNumber)字段特殊:Firebase出于安全防冒用的要求,不支持直接写入手机号值,必须走官方的短信验证码流程,调用linkWithPhoneNumber完成手机号验证后,该字段才会自动写入Auth用户表。 - 自定义扩展字段(比如性别、用户角色、注册渠道、偏好设置等):Firebase Auth本身没有预留自定义字段的存储空间,这部分数据需要存储到Firestore/实时数据库中,用用户uid作为唯一标识和Auth账号做关联。
2. 修改后的完整实现代码
// 记得在文件头部引入对应依赖方法 import { createUserWithEmailAndPassword, updateProfile, RecaptchaVerifier, linkWithPhoneNumber } from "firebase/auth"; import { getFirestore, doc, setDoc } from "firebase/firestore"; const auth = getAuth(); const db = getFirestore(); const signUpFun = () => { if (isValidForm()) { createUserWithEmailAndPassword(auth, email, password) .then(async (userCredential) => { const user = userCredential.user; // 更新displayName、头像等内置公开字段 await updateProfile(user, { displayName: "用户输入的昵称值", photoURL: "用户头像访问地址" // 无头像可传空字符串 }); // 刷新本地用户缓存,保证后续读取能拿到最新的字段值 await user.reload(); // 绑定手机号逻辑(必须走短信验证,无法跳过) // const recaptchaVerifier = new RecaptchaVerifier(auth, '注册按钮DOM ID', {}); // const confirmationResult = await linkWithPhoneNumber(user, "用户填写的手机号", recaptchaVerifier); // const smsCode = window.prompt('请输入收到的6位短信验证码'); // await confirmationResult.confirm(smsCode); // 验证通过后phoneNumber字段会自动写入Auth表 // 写入自定义扩展字段到Firestore await setDoc(doc(db, "users", user.uid), { gender: "用户填写的性别", role: "普通用户", registerChannel: "站点注册", // 其他需要存储的业务字段 }); setbitdata({}); }) .catch((error) => { const errorCode = error.code; const errorMessage = error.message; setEmailAndPasswordCheck(true) setTimeout(() => { setEmailAndPasswordCheck(false) }, 3500) }); } }
注意事项
- 所有更新操作建议单独加
try/catch错误捕获,避免单个字段更新失败中断整个注册流程。 - 不要尝试绕过短信验证直接修改phoneNumber字段,Firebase Auth服务端会直接拦截这类非法操作。
- 存在Firestore中的用户自定义信息,建议配合安全规则做权限控制,保证用户仅能修改自己的对应数据。
内容的提问来源于stack exchange,提问作者Abdullah Raoufi
相关产品推荐
相关产品推荐

