【问题标题】:Error while retrieving data from firebase flutter从 Firebase 颤振中检索数据时出错
【发布时间】:2020-04-15 12:42:03
【问题描述】:

我已完成 Google 登录选项,但无法检索注册的 Google 帐户的详细信息。

这是我的代码:

凭证参数有问题,下面是我的问题截图

Future<String> signInWithGoogle() async {
  String name;
  String email;
  String imageUrl;
  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;


//  final FirebaseUser userDetails =
//  (await _auth.signInWithCredential(credential)).user;
//// Add the following lines after getting the user
//// Checking if email and name is null
//  assert(userDetails.email != null);
//  assert(userDetails.displayName != null);
//  assert(userDetails.photoUrl != null);
//  name = userDetails.displayName;
//  email = userDetails.email;
//  imageUrl = userDetails.photoUrl;
//// Only taking the first part of the name, i.e., First Name
//  if (name.contains(" ")) {
//    name = name.substring(0, name.indexOf(" "));
//  }


  final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
  final GoogleSignInAuthentication googleSignInAuthentication =
  await googleSignInAccount.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleSignInAuthentication.accessToken,
    idToken: googleSignInAuthentication.idToken,
  );

  final AuthResult authResult = await _auth.signInWithCredential(credential);
  final FirebaseUser user = authResult.user;

  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final FirebaseUser currentUser = await _auth.currentUser();
  assert(user.uid == currentUser.uid);

  return 'signInWithGoogle succeeded: $user';
}

【问题讨论】:

    标签: firebase flutter dart firebase-authentication


    【解决方案1】:

    你代码中的变量credentials是未定义的,应该是这样的:

    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;
    }
    

    首先获取credentials,然后将变量作为参数添加到signinwithcredential


    尝试以下方法:

    Future<String> signInWithGoogle() async {
      String name;
      String email;
      String imageUrl;
    
    //  final FirebaseUser userDetails =
    //  (await _auth.signInWithCredential(credential)).user;
    //// Add the following lines after getting the user
    //// Checking if email and name is null
    //  assert(userDetails.email != null);
    //  assert(userDetails.displayName != null);
    //  assert(userDetails.photoUrl != null);
    //  name = userDetails.displayName;
    //  email = userDetails.email;
    //  imageUrl = userDetails.photoUrl;
    //// Only taking the first part of the name, i.e., First Name
    //  if (name.contains(" ")) {
    //    name = name.substring(0, name.indexOf(" "));
    //  }
    
    
      final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
      final GoogleSignInAuthentication googleSignInAuthentication =
      await googleSignInAccount.authentication;
    
      final AuthCredential credential = GoogleAuthProvider.getCredential(
        accessToken: googleSignInAuthentication.accessToken,
        idToken: googleSignInAuthentication.idToken,
      );
    
      final AuthResult authResult = await _auth.signInWithCredential(credential);
      final FirebaseUser user = authResult.user;
    
      assert(!user.isAnonymous);
      assert(await user.getIdToken() != null);
    
      final FirebaseUser currentUser = await _auth.currentUser();
      assert(user.uid == currentUser.uid);
    
      return 'signInWithGoogle succeeded: $user';
    }
    

    【讨论】:

    • 我已经编辑了我的帖子,请检查它是否正确,我不明白该怎么做
    • 一次怎么办
    • 方法有问题
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2019-06-11
    • 2020-12-03
    • 2020-08-20
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多