通过Flutter for Firebase重新发送验证

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

我在尝试注册已经创建的帐户时,向用户发送电子邮件验证链接时遇到问题。我正在使用Flutter并将Firebase作为后端数据库进行编码。


final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

   abstract class BaseAuth {
     Stream<String> get onAuthStateChanged;
     Future<String> currentUser();
     Future<String> resendVerifyEmail(BaseAuth auth, String email);
   } 

   class Auth implements BaseAuth {...}

   Future<String> currentUser() async {
      final FirebaseUser user = await _firebaseAuth.currentUser();
      print("Getting current user: " + user?.uid);
      return user?.uid;
   }

  Future<FirebaseUser> currentUserModified() async {
    final FirebaseUser user = await _firebaseAuth.currentUser();
    print("Getting current user: " + user?.uid);
    return user;
  }

  Future<String> resendVerifyEmail(BaseAuth auth, String email) async {
    try {
      final FirebaseUser user = await _firebaseAuth.currentUser();
      FirebaseUser user2 = await currentUserModified();
      user.sendEmailVerification();
      return user?.uid;
    } catch (e) {
      print("An Error occurred while sending verification link");
      print(e.toString());
      return null;
    }
   }

在try块内部,当调用方法currentUser()时,代码退出并返回到调用resendVerifyEmail的方法,而没有完成try-catch块。

我在让电子邮件验证重新发送到调用resendVerifyEmail的弹出窗口内部时遇到困难。请让我知道使用Flutter从Firebase发送电子邮件验证的其他方法,或与此相关的方法。

flutter firebase-authentication email-verification
1个回答
0
投票

似乎您在resendemail功能中添加了不必要的项目。这是我实现自己的方法:

  Future<void> sendEmailVerification() async {
    final FirebaseUser user = await _firebaseAuth.currentUser();
    user.sendEmailVerification();
  }

这样注册用户后,只需调用它:

  await Auth().sendEmailVerification();
  await Auth().signOut();

请确保注销用户,以便他们在关闭并打开您的应用程序时无法自动登录。如果用户通过以下方式验证了他的电子邮件,则还应该在登录中添加支票:

  Future<bool> isEmailVerified() async {
    final FirebaseUser user = await _firebaseAuth.currentUser();
    return user.isEmailVerified == null ? false : user.isEmailVerified;
  }

仅在您登录该用户时调用它。

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