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

如何在Firebase中将用户手机号与邮箱存储在同一子节点下

手机号注册用户生成相同数据库节点实现方案
  • 核心逻辑:Firebase 手机号注册/登录的回调返回的用户结构和邮箱注册完全一致,只需在手机号注册成功的回调中复用邮箱注册的数据库写入逻辑,保持字段结构统一即可。
  • 字段适配说明:原有邮箱注册的userObject结构中,users字段存的是用户邮箱,e2字段存的是用户密码,手机号场景下仅需替换这两个字段的取值(比如users存用户手机号,e2按业务需求填对应值即可),不要修改字段名,保证两类用户的节点结构完全一致。
  • 写入路径统一:保持databaseRef.child("people").child(user.user.uid)的写入路径不变,统一用用户uid作为people节点下的子节点key,不要用手机号作为key,避免后续查询逻辑需要适配多套规则。

示例代码

// 手机号验证完成后的登录/注册回调
Auth.auth().signIn(with: phoneCredential) { (user, error) in
  let databaseRef = Database.database().reference()
  guard error == nil else { return }
  guard let user = user else { return }
  let userObject =
    [
      "users": 你获取到的用户手机号字符串,
      "postID": user.user.uid,
      "e2": 业务对应的字段值, // 无对应值可填空字符串或默认值,不要删除该字段
    ] as [String: Any]

  databaseRef.child("people").child(user.user.uid).setValue(userObject)
  print("手机号用户节点创建完成")
}

常见报错排查

  • 确认手机号注册回调中你已正确拿到授权后的用户uid,空值会导致写入失败
  • 检查实时数据库的权限规则,是否允许新注册的手机号用户写入people节点路径
  • 不要修改userObject的key名称,避免两类用户的节点结构不一致导致后续功能报错

内容的提问来源于stack exchange,提问作者florida27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:03