使用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 登录