You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:31:15