验证电子邮件地址从谷歌注册-Flutter移动的应用程序

rqqzpn5f  于 2023-08-07  发布在  Flutter
关注(0)|答案(1)|浏览(335)

我尝试在现有帐户中添加一个多因素身份验证,该帐户是用google登录的。
我收到错误“先验证电子邮件”
[SmsRetrieverHelper]短信验证码请求失败:未知状态代码:17086在注册第二个因素之前需要先验证电子邮件。
看来我得验证一下google邮箱地址了。我的问题是我是否必须通过电子邮件和密码登录再次验证用户**。与:

final credential = EmailAuthProvider.credential(email: emailAddress, password: password);

字符串
然后链接google和email auth提供商,如下所述:https://firebase.google.com/docs/auth/flutter/account-linking?authuser=0
或者我必须使用“电子邮件链接验证”,如此处所述:https://firebase.google.com/docs/auth/flutter/email-link-auth?authuser=0
或者有没有一种完全不同的、更简单的方法来验证谷歌帐户的电子邮件地址?
使用代码:

final GoogleSignIn googleSignIn = GoogleSignIn();

Future<UserCredential> signInWithGoogle(BuildContext context) async {
  // Trigger the authentication flow
  final GoogleSignInAccount? googleUser = await (googleSignIn.signIn());

  // Obtain the auth details from the request
  final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;

  // Create a new credential
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth?.accessToken,
    idToken: googleAuth?.idToken,
  );

  // Once signed in, return the UserCredential
  final UserCredential authResult = await FirebaseAuth.instance.signInWithCredential(credential);

  String? name = authResult.user?.displayName;
  final String? email = authResult.user?.providerData[0].email ;
  final String? imageUrl = authResult.user?.photoURL;

  //Only taking the first part of the name, i.e., First Name
  if (name!.contains(" ")) {
    name = name.substring(0, name.indexOf(" "));
  }

  print(name);
  print(email);
  print(imageUrl);
  print(authResult.user?.emailVerified);

  return authResult;
}

c2e8gylq

c2e8gylq1#

我试着用这个最小的代码重现这个问题:

var cred = await signInWithGoogle();
var user = cred.user!;
print(user);

字符串
这里的signInWithGoogle函数是从Firebase文档中复制/粘贴到Web上的Google登录:

Future<UserCredential> signInWithGoogle() async {
  // Create a new provider
  GoogleAuthProvider googleProvider = GoogleAuthProvider();

  googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
  googleProvider.setCustomParameters({
    'login_hint': 'user@example.com'
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(googleProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}


可运行版本:https://zapp.run/edit/auth-is-google-auto-verified-zrw06uvrx06?file=lib/main.dart
当我选择我的gmail帐户时,它显示我的电子邮件在Logs面板中经过验证:
用户(显示名称:Frank货车Puffelen,电子邮件:xxxxx@gmail.com,电子邮件验证:true,isAnonymous:false,元数据:...
当您运行相同的示例时,它是否将emailVerified显示为false

相关问题