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

如何将Firebase认证用户同步至实时数据库?

实现Firebase Auth用户信息同步到实时数据库

问题背景

我有一个React Native项目,需要关联用户ID与其在应用中的统计数据。目前仅使用了Firebase Auth,现在需要将用户信息复制到Firebase实时数据库中,请问该如何实现?

以下是我的用户注册代码:

const hanldeRegister = () => {  
  if (password !== confirmPassword){    
    alert("Пароли не совпадают!")  
  }  
  else{    
    setIsLoading(true)    
    axios({      
      method: 'POST',      
      url: 'https://identitytoolkit.googleapis.com/v1/accounts:signUp',      
      params: {        
        key: 'AIzaSyA-mqI2gljPLMS1KW_InAyE3XzS5tQch2I',      
      },      
      data: {        
        email,        
        password,      
    },    
  })    
  .then((res) => {      
    axios({        
      method: 'POST',        
      url: 'https://identitytoolkit.googleapis.com/v1/accounts:update',        
      params: {          
        key: 'AIzaSyA-mqI2gljPLMS1KW_InAyE3XzS5tQch2I',        
      },        
      data: {          
        idToken: res.data.idToken,          
        displayName: name + ' ' + surname        
      }      
    }).then((r) => {        
      setUser({...r.data, idToken: res.data.idToken})      
    }).catch(e => {        
      console.log(e, 'updaate profile error');        
      alert(e.message);      
    })      
    .finally(() => {        
      setIsLoading(false);      
    })      
    console.log(res.data)    
  })    
  .catch((error) => console.log(error.response.request._response))  
  }  
}

解决方案

1. 配置实时数据库安全规则

先确保实时数据库规则允许已认证用户读写自己的数据,示例规则如下:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

该规则限制仅用户本人能访问自己的数据,保障安全性。

2. 修改注册代码,添加数据库写入逻辑

在更新用户Profile的回调中,新增实时数据库写入请求,将用户信息同步过去:

const hanldeRegister = () => {  
  if (password !== confirmPassword){    
    alert("Пароли не совпадают!")  
  }  
  else{    
    setIsLoading(true)    
    axios({      
      method: 'POST',      
      url: 'https://identitytoolkit.googleapis.com/v1/accounts:signUp',      
      params: {        
        key: 'AIzaSyA-mqI2gljPLMS1KW_InAyE3XzS5tQch2I',      
      },      
      data: {        
        email,        
        password,      
    },    
  })    
  .then((res) => {      
    const userUid = res.data.localId; // 获取用户唯一标识UID
    axios({        
      method: 'POST',        
      url: 'https://identitytoolkit.googleapis.com/v1/accounts:update',        
      params: {          
        key: 'AIzaSyA-mqI2gljPLMS1KW_InAyE3XzS5tQch2I',        
      },        
      data: {          
        idToken: res.data.idToken,          
        displayName: name + ' ' + surname        
      }      
    }).then((r) => {        
      // 写入用户数据到实时数据库
      return axios({
        method: 'PUT', // 用PUT指定节点为用户UID,保证唯一对应
        url: `https://你的数据库名称.firebaseio.com/users/${userUid}.json`,
        params: {
          auth: res.data.idToken // 携带ID Token完成身份验证
        },
        data: {
          email: r.data.email,
          displayName: r.data.displayName,
          // 初始化统计数据,可根据需求调整
          stats: {
            totalScore: 0,
            completedTasks: 0
          }
        }
      })
    }).then(() => {
      // 数据库写入成功后更新本地用户状态
      setUser({...r.data, idToken: res.data.idToken})
    }).catch(e => {        
      console.log(e, 'update profile or database error');        
      alert(e.message);      
    })      
    .finally(() => {        
      setIsLoading(false);      
    })      
    console.log(res.data)    
  })    
  .catch((error) => console.log(error.response.request._response))  
  }  
}

3. 关键说明

  • 使用PUT请求:将用户UID作为数据库节点的键,确保每个用户对应唯一节点,方便后续关联统计数据。
  • 携带auth参数:实时数据库会验证该ID Token,确保只有当前认证用户能写入自己的数据,匹配之前配置的规则。
  • 初始化统计字段:写入用户信息时可同步初始化统计数据,后续更新统计值直接操作该节点即可。

注意事项

  • 替换https://你的数据库名称.firebaseio.com为你的实时数据库实际URL。
  • 确保Firebase项目已启用实时数据库服务。
  • 完善错误捕获逻辑,处理网络请求失败、权限不足等异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:30:43