Firebase Firestore未创建集合及存储桶问题排查求助
Firestore注册数据未存储、Storage存储桶未创建的问题排查
问题场景
用户通过Firebase Auth成功创建账号后,用户信息未写入Firestore,Firebase Storage也未生成预期的存储桶,注册核心代码如下:
CollectionReference get _users => _firestore.collection(FirebaseConstants.usersCollection); FutureEither<UserModel> createAccount( String birthday, String email, String gender, String password, String username, Uint8List file, ) async { try { UserCredential credential = await _auth.createUserWithEmailAndPassword( email: email, password: password, ); String profile = 'profile_pics'; String avatarUrl = await _storageRepository.posttostorage(file, profile); UserModel userModel = UserModel( avatarUrl: avatarUrl, birthday: birthday, email: email, followers: [], following: [], gender: gender, password: password, username: username, userID: credential.user!.uid, ); await _users.doc(credential.user!.uid).set(userModel.toMap()); return right(userModel); } on FirebaseException catch (e) { throw e.message!; } catch (e) { return left( ErrorMessages( e.toString(), ), ); } }
核心排查点
1. Storage上传逻辑异常阻断流程
_storageRepository.posttostorage方法如果执行失败,会直接进入异常分支,导致后续Firestore写入代码无法执行。
- 检查
posttostorage实现:是否在上传失败时正确抛出异常?有没有吞掉错误的情况? - 验证Storage权限:默认规则要求认证用户才能读写,可临时放宽规则测试(测试后务必改回):
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }
2. Firestore写入失败未触发异常
- 检查Firestore安全规则:确认刚创建的用户是否具备写入权限,默认规则要求用户已认证,可在写入前打印
credential.user!.uid验证用户ID有效性。 - 排查
UserModel.toMap()方法:是否存在Firestore不支持的数据类型?或者字段格式错误?可以先尝试写入极简Map测试:
如果极简写入成功,说明await _users.doc(credential.user!.uid).set({ 'email': email, 'username': username, 'userID': credential.user!.uid });toMap()方法存在问题。
3. 异常处理逻辑不一致
当前代码中on FirebaseException catch (e)直接抛出异常,而其他错误返回left(ErrorMessages(...)),这种不一致可能导致调用方未捕获到抛出的异常,从而忽略错误。建议统一返回错误对象:
on FirebaseException catch (e) { return left(ErrorMessages(e.message!)); }
4. Firebase项目配置问题
- 确认项目中
google-services.json(Android)或GoogleService-Info.plist(iOS)与Firebase控制台配置完全匹配。 - 检查Firebase控制台是否已启用Firestore和Storage服务,未启用服务会导致功能无法正常工作。
内容的提问来源于stack exchange,提问作者khomotjo_codes
相关产品推荐
相关产品推荐

