Flutter开发:Firebase Auth新增用户后如何存储到Firestore数据库
Firebase Auth注册数据同步到Firestore操作指南
1. 前置依赖配置
- 首先在
pubspec.yaml的dependencies节点下添加cloud_firestore依赖,版本需要和你当前使用的firebase_auth版本兼容:
dependencies: flutter: sdk: flutter firebase_core: ^你的现有版本号 firebase_auth: ^你的现有版本号 cloud_firestore: ^对应兼容版本
- 执行
flutter pub get安装依赖 - 进入Firebase控制台开启Firestore Database,测试阶段可以先将安全规则设置为(上线前请替换为正式权限规则):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }
2. 修改注册页面代码
首先在注册页面的代码顶部导入Firestore包:
import 'package:cloud_firestore/cloud_firestore.dart';
然后在_SignUpPageState类中添加Firestore实例:
FirebaseAuth _auth = FirebaseAuth.instance; FirebaseFirestore _firestore = FirebaseFirestore.instance; // 新增这行 final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
修改signUp方法,在用户注册成功、更新完displayName之后,添加写入Firestore的逻辑:
signUp() async { if (_formKey.currentState.validate()) { _formKey.currentState.save(); try { UserCredential userCredential = await _auth.createUserWithEmailAndPassword( email: _email, password: _password); if (userCredential.user != null) { await _auth.currentUser.updateProfile(displayName: _username); // 新增以下写入Firestore逻辑 await _firestore.collection('users').doc(userCredential.user.uid).set({ 'uid': userCredential.user.uid, 'username': _username, 'email': _email, 'createdAt': FieldValue.serverTimestamp(), // 可以根据需求添加其他自定义字段 }); // 原来的跳转逻辑保留 await Navigator.pushReplacementNamed(context,"/") ; } } catch (e) { showError(e.message); print(e); } } }
3. 逻辑说明
- 这里使用用户的uid作为Firestore users集合的文档ID,方便后续通过用户身份直接查询对应用户数据,避免额外的查询过滤操作
- 登录逻辑不需要修改,只有新用户注册的时候才需要写入初始用户数据,后续用户信息更新可以单独调用update方法修改对应文档
- 如果出现权限报错,优先检查Firestore安全规则是否配置正确,以及注册流程是在用户登录成功之后才执行写入操作
内容的提问来源于stack exchange,提问作者New user
相关产品推荐
相关产品推荐

