Flutter开发中如何获取Firestore集合内谷歌注册用户的uid
问题核心原因
你混淆了两套完全独立的用户ID体系:
GoogleSignInAccount.id是谷歌账号平台分配的用户标识,不属于Firebase体系- 你需要的统一uid是Firebase Auth为所有登录方式(邮箱/谷歌/手机号等)统一分配的标识,必须从Firebase返回的
User对象中获取
同时你现有的谷歌登录方法存在两处逻辑错误:
- 用户取消谷歌登录(
result == null)时,你直接调用了未赋值的_user!.id,会触发空安全异常 - 调用
_auth.signInWithCredential后没有接收返回的认证结果,无法拿到Firebase侧的用户信息
修正代码
将你现有的signInithGoogle方法替换为以下代码即可,逻辑和邮箱注册流程完全对齐:
Future signInWithGoogle() async { try { final result = await googleSignIn.signIn(); // 用户取消登录直接终止流程 if (result == null) return null; _user = result; final googleAuth = await result.authentication; final AuthCredential credential = GoogleAuthProvider.credential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); // 接收Firebase Auth返回的认证结果,拿到标准User对象 UserCredential googleAuthResult = await _auth.signInWithCredential(credential); User? firebaseUser = googleAuthResult.user; if (firebaseUser != null) { // 统一使用Firebase分配的uid操作数据库,和邮箱注册逻辑一致 await DatabaseService(uid: firebaseUser.uid).updateUserData('new user', 0); return _userFromFirebaseUser(firebaseUser); } return null; } catch (e) { print(e.toString()); return null; } }
额外说明
后续所有涉及用户唯一标识的操作,都统一从FirebaseAuth.instance.currentUser?.uid或者你封装的_userFromFirebaseUser方法返回的对象中取值,即可保证全平台登录方式的用户ID体系统一,不会出现数据混乱。
内容的提问来源于stack exchange,提问作者Mamoudou Kane
相关产品推荐
相关产品推荐

