我尝试在现有帐户中添加一个多因素身份验证,该帐户是用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;
}
型
1条答案
按热度按时间c2e8gylq1#
我试着用这个最小的代码重现这个问题:
字符串
这里的
signInWithGoogle
函数是从Firebase文档中复制/粘贴到Web上的Google登录:型
可运行版本: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
?