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

如何将Firebase Auth与Firebase实时数据库关联(React Native场景)

实现Firebase认证与实时数据库的用户数据关联

核心思路

通过Firebase登录接口返回的localId(用户唯一标识)和idToken(身份凭证),关联实时数据库中对应用户的专属节点,实现数据的安全读写。

步骤1:完善登录逻辑,获取关键凭证

登录成功后,除了保存用户信息,还要提取localId和idToken,并触发用户统计数据的加载:

const handleLogin = () => {
  setIsLoading(true)
  axios({
    method: 'POST',
    url: 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword',
    params: {
      key: '你的Firebase项目API_KEY',
    },
    data: {
      email,
      password,
      returnSecureToken: true // 显式声明确保返回idToken
    }
  }).then(res => {
    const userData = res.data;
    setUser(userData);
    // 登录成功后加载用户统计数据
    loadUserStats(userData.localId, userData.idToken);
  })
  .catch(e => {
    console.error('登录失败:', e.response?.data?.error?.message || '未知错误');
  })
  .finally(() => {
    setIsLoading(false)
  })
}

步骤2:加载用户统计数据

通过用户localId定位数据库专属节点,请求时携带idToken做权限验证:

const loadUserStats = (userId, idToken) => {
  axios({
    method: 'GET',
    url: `https://你的项目ID.firebaseio.com/users/${userId}/stats.json`,
    params: {
      auth: idToken // 身份凭证确保仅当前用户可访问
    }
  }).then(res => {
    const stats = res.data || { score: 0, count: 0 }; // 无数据时初始化默认值
    setUserStats(stats); // 假设你有对应state保存统计数据
  }).catch(e => {
    console.error('加载统计数据失败:', e);
  })
}

步骤3:上传/更新用户统计数据

使用PATCH(部分更新)或PUT(覆盖更新)请求,同样携带idToken:

const updateUserStats = (userId, idToken, newStats) => {
  axios({
    method: 'PATCH',
    url: `https://你的项目ID.firebaseio.com/users/${userId}/stats.json`,
    params: {
      auth: idToken
    },
    data: newStats
  }).then(res => {
    console.log('统计数据更新成功');
    setUserStats(prev => ({ ...prev, ...newStats }));
  }).catch(e => {
    console.error('更新统计数据失败:', e);
  })
}

关键:配置实时数据库安全规则

必须设置规则确保用户只能读写自己的数据:

{
  "rules": {
    "users": {
      "$userId": {
        ".read": "auth != null && auth.uid == $userId",
        ".write": "auth != null && auth.uid == $userId"
      }
    }
  }
}

注意事项

  • 替换代码中的你的Firebase项目API_KEY和你的项目ID为实际值
  • 数据库节点路径可按需调整(比如改为userStats/${userId})

内容的提问来源于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 02:45:23