我尝试向现有帐户添加多重身份验证,该帐户已使用 google 登录。
我收到错误“首先验证电子邮件”:
[SmsRetrieverHelper] 短信验证码请求失败:未知状态码:17086 需要先验证电子邮件,然后再注册第二个要素。
所以看来我必须验证谷歌电子邮件地址。
我的问题是我是否必须通过电子邮件和密码登录再次验证用户身份。与:
final credential = EmailAuthProvider.credential(email: emailAddress, password: password);
然后链接谷歌和电子邮件身份验证提供商,如下所述:https://firebase.google.com/docs/auth/flutter/account-linking?authuser=0https://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;
}
var cred = await signInWithGoogle();
var user = cred.user!;
print(user);
signInWithGoogle
功能可从 Firebase 文档中复制/粘贴到
在网络上使用 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': '[email protected]'
});
// 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
Logs
面板中显示我的电子邮件已通过验证:
用户(显示名称:Frank van Puffelen,电子邮件:[email protected],电子邮件验证:true,isAnonymous:false,元数据:...
当您运行相同的示例时,它是否将
emailVerified
显示为
false
?