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

React Native实现Google登录后将用户数据保存至Firebase

React Native Google登录后将用户数据保存到Firebase

实现步骤

要把Google登录的用户数据存入Firebase,需完成Firebase认证关联和用户数据存储两步,以下是具体实现:

  1. 依赖准备
    确保项目已安装并配置好以下依赖:
  • @react-native-google-signin/google-signin(你现有代码已集成)
  • @react-native-firebase/auth:用于Firebase身份认证
  • @react-native-firebase/firestore(或@react-native-firebase/database,根据你选择的数据库类型)
  1. 修改登录函数,添加Firebase处理逻辑
    在现有googleLogin函数中,补充认证和数据存储代码:
import auth from '@react-native-firebase/auth';
import firestore from '@react-native-firebase/firestore';
import { GoogleSignin, statusCodes } from '@react-native-google-signin/google-signin';

const googleLogin = async () => {
  try {
    await GoogleSignin.hasPlayServices();
    const userInfo = await GoogleSignin.signIn();
    console.log(userInfo); // 已获取到Google用户数据

    // 1. 从Google登录结果中获取idToken,创建Firebase认证凭证
    const googleCredential = auth.GoogleAuthProvider.credential(userInfo.idToken);

    // 2. 使用凭证完成Firebase用户认证
    const firebaseUser = await auth().signInWithCredential(googleCredential);
    console.log('Firebase登录成功:', firebaseUser.user);

    // 3. 将用户数据保存到Firebase Firestore
    await firestore()
      .collection('users') // 自定义用户集合名称
      .doc(firebaseUser.user.uid) // 用Firebase用户ID作为文档ID,避免重复存储
      .set({
        uid: firebaseUser.user.uid,
        name: userInfo.user.name,
        email: userInfo.user.email,
        photoUrl: userInfo.user.photo,
        createdAt: firestore.FieldValue.serverTimestamp(), // 记录服务器时间戳
      }, { merge: true }); // merge: true 表示存在则更新、不存在则创建

    console.log('用户数据已保存到Firebase');

  } catch (error) {
    if (error.code === statusCodes.SIGN_IN_CANCELLED) {
      // 用户取消登录流程
    } else if (error.code === statusCodes.IN_PROGRESS) {
      // 登录操作已在进行中
    } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
      // 谷歌服务不可用或版本过低
    } else {
      console.error('登录或存储失败:', error);
    }
  }
};

关键说明

  • Firebase认证关联:通过GoogleAuthProvider.credential将Google的idToken转换为Firebase可识别的凭证,完成用户认证后,用户会被记录在Firebase Auth的用户列表中。
  • 数据存储优化:set({ merge: true })可以避免覆盖已存在的用户数据,新用户创建文档、老用户仅更新变动字段。
  • 实时数据库替代写法:如果使用Firebase实时数据库,替换Firestore代码为:
    await database()
      .ref(`users/${firebaseUser.user.uid}`)
      .set({
        uid: firebaseUser.user.uid,
        name: userInfo.user.name,
        email: userInfo.user.email,
        photoUrl: userInfo.user.photo,
        createdAt: new Date().toISOString(),
      });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:45:48