Flutter中Firestore注册时关联用户ID及数据读写问题
解决方案:Firestore关联用户ID存储与检索
一、注册时添加用户ID并关联数据
核心逻辑是先通过Firebase Auth创建用户,获取用户唯一ID(uid),再将该ID与用户信息一同存入Firestore。推荐将uid作为用户文档的ID,后续检索会更高效。
代码示例(前端JavaScript)
// Sign Up按钮点击事件处理函数 async function handleSignUp() { // 从UI获取输入值 const firstName = document.getElementById('firstName').value; const lastName = document.getElementById('lastName').value; const email = document.getElementById('email').value; const password = document.getElementById('password').value; try { // 1. 创建Firebase Auth用户,获取用户UID const userCredential = await firebase.auth().createUserWithEmailAndPassword(email, password); const userId = userCredential.user.uid; // 2. 将用户信息连同UID存入Firestore(用UID作为文档ID) await firebase.firestore().collection('users').doc(userId).set({ firstName: firstName, lastName: lastName, email: email // 可选,按需添加其他字段 }); alert('注册成功'); } catch (error) { console.error('注册失败:', error); alert(error.message); } }
可选存储方式
如果不想用UID作为文档ID,也可以自动生成文档ID,同时将UID作为字段存入:
await firebase.firestore().collection('users').add({ userId: userId, firstName: firstName, lastName: lastName, email: email });
二、检索对应用户的数据
根据存储方式的不同,检索逻辑略有差异,通常在用户登录后获取当前用户的UID进行查询。
方式一:通过UID作为文档ID检索(推荐)
// 获取当前登录用户的数据 async function getCurrentUserData() { const currentUser = firebase.auth().currentUser; if (!currentUser) { console.log('用户未登录'); return; } const userId = currentUser.uid; const userDoc = await firebase.firestore().collection('users').doc(userId).get(); if (userDoc.exists) { const userData = userDoc.data(); console.log('用户数据:', userData); // 将数据渲染到UI,例如显示姓名 document.getElementById('userFullName').textContent = `${userData.firstName} ${userData.lastName}`; } else { console.log('未找到该用户的存储数据'); } }
方式二:通过userId字段检索
如果之前用自动生成文档ID的方式存储,需要通过字段匹配查询:
async function getCurrentUserData() { const currentUser = firebase.auth().currentUser; if (!currentUser) return; const userId = currentUser.uid; const querySnapshot = await firebase.firestore().collection('users') .where('userId', '==', userId) .get(); if (!querySnapshot.empty) { const userData = querySnapshot.docs[0].data(); console.log('用户数据:', userData); } else { console.log('未找到该用户的存储数据'); } }
安全规则配置(必加)
为了保证数据安全,需在Firestore安全规则中限制用户只能访问自己的数据:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; } } }
内容的提问来源于stack exchange,提问作者Kvu
相关产品推荐
相关产品推荐

