【问题标题】:Firebase Google users not showing in Firebase Console AuthenticationFirebase Google 用户未在 Firebase 控制台身份验证中显示
【发布时间】:2017-12-10 18:26:55
【问题描述】:

使用 Firebase Google 身份验证,当用户使用其 google 帐户成功登录时,他们不会显示在我们的 Firebase 控制台身份验证->用户屏幕上。只有电子邮件/密码用户显示在那里。

是否需要做一些额外的事情才能看到 Google Auth 用户?

【问题讨论】:

  • 请添加一些代码。
  • 如果您的身份验证一切正常,则无需额外步骤
  • OAuth 用户(例如 Google)只有在您通过调用 signInWithCredential() 将他们登录到 Firebase 后才会显示在 Firebase 控制台中。在那次通话之前,他们可能已登录 Google,但尚未登录 Firebase。
  • 确实,这就是问题所在。我没有在任何地方调用 signInWithCredential() 并且它成功登录了 Google,但没有登录到 Firebase。

标签: firebase flutter firebase-authentication


【解决方案1】:

按照以下步骤操作:

  • 触发 Google 身份验证流程。

 

final GoogleSignInAccount googleUser = await GoogleSignIn().signIn();
  • 从请求中获取身份验证详细信息。

 

final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
  • 创建新凭据

 

final GoogleAuthCredential googleCredential = GoogleAuthProvider.credential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );
  • 使用 Google [UserCredential] 登录 Firebase

 

final UserCredential googleUserCredential =
    await FirebaseAuth.instance.signInWithCredential(googleCredential);

就是这样!!

【讨论】:

    【解决方案2】:

    在 Flutter 中,除了 GoogleSignIn 之外,还需要安装 firebase_auth 包。

    https://pub.dev/packages/firebase_auth#-installing-tab-

    https://pub.dev/packages/firebase_auth
    
    import 'package:firebase_auth/firebase_auth.dart';
    
    final GoogleSignIn _googleSignIn = GoogleSignIn();
    final FirebaseAuth _auth = FirebaseAuth.instance;
    
    Future<FirebaseUser> _handleSignIn() async {
      final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
      final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
    
      final AuthCredential credential = GoogleAuthProvider.getCredential(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );
    
      final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
      print("signed in " + user.displayName);
      return user;
    }
    
    ...
    
    _handleSignIn()
        .then((FirebaseUser user) => print(user))
        .catchError((e) => print(e));
    

    【讨论】:

    • FirebaseUser 已弃用,请改用 User!
    【解决方案3】:

    正如 Frank 所说,要完全登录 Firebase,需要调用 signInWithCredential()。实施此功能后,使用 Google 登录的用户会显示在 Firebase 控制台中。

    【讨论】:

    • 如何使用 google connect 实现这个signInWithCredential()?谢谢
    • const googleCredential = firebase.auth.GoogleAuthProvider.credential(response.idToken); firebase.auth().signInWithCredential(googleCredential) .then(user => { });
    猜你喜欢
    • 2020-10-12
    • 2017-11-20
    • 2016-12-13
    • 2019-05-23
    • 1970-01-01
    • 2018-12-09
    • 2018-12-29
    • 2016-09-26
    • 2022-08-19
    相关资源
    最近更新 更多