如何将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
相关产品推荐
相关产品推荐

