如何检查用户是不是验证邮件然后让登录?

Posted

技术标签:

【中文标题】如何检查用户是不是验证邮件然后让登录?【英文标题】:How check if user verify mail and then let logged in?如何检查用户是否验证邮件然后让登录? 【发布时间】:2021-06-03 08:10:33 【问题描述】:

我知道这个问题问了很多次,但在花了几个小时试图理解之后,我仍然不知道该怎么做。

所以我知道我有 2 个 Future 方法

登录

 Future<String> signIN(String email, String password) async 
    
      try 
        (await FirebaseAuth.instance.signInWithEmailAndPassword(
          email: email.trim(),
          password: password,
        ))
            .user;
       on FirebaseAuthException catch (e) 
        switch (e.code) 
          case 'invalid-email':
            
              return 'Email is not valid';
            
          case 'user-disabled':
            
              return 'Account is not active';
            
          case 'user-not-found':
            
              return 'No user found';
            
          case 'wrong-password':
            
              return 'wrong password';
            
          default:
            
              return 'Unexpected error!';
            
        
      
      return null;

    
  

然后注册

 Future<String> signUp(String email, String password) async 
    try 
      (await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: email.trim(),
        password: password,
      ))
          .user
          .sendEmailVerification();
     on FirebaseAuthException catch (e) 
      switch (e.code) 
        case 'invalid-email':
          
            return 'Email is not valid';
          
        case 'user-disabled':
          
            return 'Account is not active';
          
        case 'user-not-found':
          
            return 'No user found';
          
        case 'wrong-password':
          
            return 'wrong password';
          
        default:
          
            return 'Unexpected error!';
          
      
    
    return null;
  

我希望我知道如何首先检查用户是否验证了邮件,然后让他登录。 正确知道用户按下注册按钮并自动登录。

请帮忙!!

这里是按下的方法

首先按下注册按钮

      onPressed: () async 
            if (_formKey.currentState.validate()) 
              
              String authError = await _auth.signUp(email, password);
              if (authError != null) 
                 setState(() => jawoll = true);
                setState(() => error = authError);
               
              else
                 setState(() => loading = true);
                 setState(() => jawoll = false);
                setState(() => error = "Email send to $email");
             
              
            
          

还有登录按钮

   onPressed: () async 
              if (_formKey.currentState.validate()) 
                
                String authError = await _auth.signIN(email, password);
                if (authError != null) 
                  setState(() => error = authError);
                  print("olaaa");
                  print(error);
                
                setState(() => loading = false);
              
            

【问题讨论】:

【参考方案1】:

从小部件树中删除负责自动登录用户的流 (authStateChanges)。

然后,手动推送一个新的电子邮件注册屏幕。完成后让您的用户转到主屏幕。

以后再次打开应用程序时,您可以检查用户是否已登录以及电子邮件是否经过验证。如果是,请转到主屏幕,如果不是,请转到登录屏幕。

这里的问题是用户登录时流会自动更改,无论电子邮件是否经过验证。所以,删除它并继续!

【讨论】:

感谢您的回答。但实际上我不希望用户进入新页面来验证他的邮件。我希望该用户可以转到他的电子邮件帐户以验证他已发送的邮件,然后返回我的应用程序并登录。 当然。这也可以以同样的方式轻松完成。只需按下“完成”按钮触发验证,显示“请验证您的电子邮件”之类的小吃吧,您就完成了! 好的,现在我想我明白了,但是我如何询问电子邮件是否经过验证,您能否显示代码示例或告诉我如何在我的代码中执行此操作?? 当然。所以这可以通过在用户类上调用 isEmailVerified 来完成。方法可以看here。

以上是关于如何检查用户是不是验证邮件然后让登录?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证

想修改 laravel 默认登录来检查用户是不是被验证

如何在 AWS Amplify for Flutter 中检查用户是不是已确认(电子邮件/电话验证)

如何检查用户是不是刚刚在 Firebase 中首次登录 Google

如何检查用户是不是存在于 Firebase 中?

Laravel:登录后的空白页面,然后检查角色