从谷歌注册验证电子邮件地址 - flutter

问题描述 投票:0回答:1

我尝试向现有帐户添加多重身份验证,该帐户已使用 google 登录

我收到错误“首先验证电子邮件”

[SmsRetrieverHelper] 短信验证码请求失败:未知状态码:17086 需要先验证电子邮件,然后再注册第二个要素。

所以看来我必须验证谷歌电子邮件地址。 我的问题是我是否必须通过电子邮件和密码登录再次验证用户身份。与: final credential = EmailAuthProvider.credential(email: emailAddress, password: password);

然后链接谷歌和电子邮件身份验证提供商,如下所述:
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; }


                
flutter firebase-authentication google-signin multi-factor-authentication email-verification
1个回答
1
投票

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

当我选择我的 Gmail 帐户时,它会在

Logs

面板中显示我的电子邮件已通过验证:


用户(显示名称:Frank van Puffelen,电子邮件:[email protected]
电子邮件验证:true

,isAnonymous:false,元数据:...

当您运行相同的示例时,它是否将
emailVerified

显示为

false
    

© www.soinside.com 2019 - 2024. All rights reserved.