使用firebase和flutter登录google后获取用户详细信息
Posted
技术标签:
【中文标题】使用firebase和flutter登录google后获取用户详细信息【英文标题】:get user details after signing in with google using firebase & flutter 【发布时间】:2021-08-29 07:36:06 【问题描述】:在用户使用 Firebase 在 Flutter 中使用 Google 签名后,我试图获取用户详细信息。这是我拥有的代码,它成功地让用户登录,但是当我访问详细信息时,当我将鼠标悬停在红线上时,它会给我这个消息 - 错误 - 无法无条件访问属性“用户名”,因为接收者可以为“空”
Future<User?> signInWithGoogle() async
FirebaseAuth auth = FirebaseAuth.instance;
User? user;
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
if (googleUser != null)
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
try
final UserCredential userCredential = await auth.signInWithCredential(credential);
final user = userCredential.additionalUserInfo.username;
print(user);
on FirebaseAuthException catch (e)
if (e.code == 'account-exists-with-different-credential')
else if (e.code == 'invalid-credential')
catch (e)
return user;
这是用户变量下出现红线的截图——
如何获取登录用户的所有详细信息,包括会话信息?
【问题讨论】:
【参考方案1】:你看到错误信息的原因很好解释:不能像那样使用值username
,因为该值的所有者可以是null
,所以你需要先检查它是否是是否为空。
使用onAuthStateChanged
监听器获取用户数据:
FirebaseAuth.instance
.authStateChanges()
.listen((User? user)
if (user == null)
print('User is currently signed out!');
else
print('User is signed in!');
);
这将使您的身份验证状态管理更加容易,并为您使用的任何提供程序概括工作流程。您还可以使用它捕获注销
【讨论】:
感谢@Tarik,这很有效,还有一件事要澄清,如果我使用提供商,我是否应该只使用一个按钮进行登录和注册。听说用户不在系统时,用户登录时,系统注册新用户,然后自动登录,是这样吗? 是的,这是真的。对于 Google、Facebook 等提供商来说,一个按钮就足够了。请注意捕捉潜在的错误。如果用户已经使用了提供商,那么其他用户可能会失败,因为已经存在具有相同电子邮件但不同提供商的用户。您需要在用户登录时链接它们。这是用户在您为其提供功能时需要做的事情。以上是关于使用firebase和flutter登录google后获取用户详细信息的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Firebase Google Apple Facebook 登录
Flutter - 可以在没有 Firebase 的情况下使用 Google 登录吗?
仅当用户存在于 Firebase 中时 Flutter google 登录?
Flutter with Firebase Google 登录:断言失败 network_image_io.dart
请求的身份验证范围不足 - 在 Flutter 中使用 Firebase 从 Google 登录获取生日时出错
如何在 Flutter 中使用 rest api 不使用 firebase 以 google 或 facebook 登录