繁体   English   中英

如何在这个 flutter 中添加 email 验证? 我需要在登录之前验证用户

[英]How to add email verification in this flutter? I need to verify users before signing them in

此代码必须在用户单击登录时为我提供 email 验证首先他们必须验证他们的邮件然后才能登录

            onPressed: () async{

                      if (nameTextEditingController.text.length < 4) {
                         displayToastMessage(
                             "Username Must be atleast 4 characters",
                             context);
                      } else if (!emailTextEditingController.text
                          .contains("@")) {
                        displayToastMessage("Email is not Valid ", context);
                      } else if ((phoneTextEditingController.text.length <10 )) {
                        displayToastMessage(
                            "Invalid Phone number  ", context);
                      } else if (passwordTextEditingController.text.length <
                          7) {
                        displayToastMessage(
                            "Password must be 6 characters long", context);
                      } else {
                        registerNewUser(context);
                      }





                    }),
              ],
            ),
          ),
          FlatButton(
              onPressed: () {

                Navigator.pushNamedAndRemoveUntil(
                    context, LoginScreen.idscreen, (route) => false);
              },
              child: Text("Already have an Account ? Login Here",style: TextStyle(fontSize: 17,color: Colors.white),)),
        ],
      ),
    ),
  ),
);


     final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

     void registerNewUser(BuildContext context) async {




showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context)
    {
      return ProgressDialog(message: "Signing In , please wait....",);
    });



final User firebaseUser = (await _firebaseAuth
        .createUserWithEmailAndPassword(
            email: emailTextEditingController.text,
            password: passwordTextEditingController.text)
        .catchError((errMsg){
          Navigator.pop(context);
          displayToastMessage("Error:"+errMsg.toString(), context);



})
)
    .user;

if (firebaseUser != null) //user has been created
{
  Map userDataMap = {
    "name": nameTextEditingController.text.trim(),
    "email": emailTextEditingController.text.trim(),
    "phone": phoneTextEditingController.text.trim(),
  };

  usersRef.child(firebaseUser.uid).set(userDataMap);
  displayToastMessage("Welcome to Yatra. Book ride as you like", context);

  Navigator.pushNamedAndRemoveUntil(
       context, MainScreen.idscreen, (route) => false);


    } else {
  Navigator.pop(context);
  //if error display messages
  displayToastMessage("UserAccount hasn't been Created", context);

  }
    }


       }

       displayToastMessage(String message, BuildContext context)
         {
      Fluttertoast.showToast(msg: message);
        }

我遇到了 sendEmailVerification(); firebase_auth package 提供的方法,但需要一些关于设置的建议。 有没有人可以遵循的工作代码示例?

您可以分两步实现:

  1. 创建用户后发送验证邮件
  2. 检查用户是否已通过验证,并决定在用户尝试登录时显示什么 UI

发送验证邮件:

     void registerNewUser(BuildContext context) async {

       ... //Your existing code for creating the new user

       if (firebaseUser != null)  {
         Map userDataMap = {
           "name": nameTextEditingController.text.trim(),
           "email": emailTextEditingController.text.trim(),
           "phone": phoneTextEditingController.text.trim(),
       };

       usersRef.child(firebaseUser.uid).set(userDataMap);

       await firebaseUser.sendEmailVerification();

       await handleUserEmailVerification(context, user: firebaseUser);

       }
       ... //Rest of your code
     }


检查用户是否通过验证

      Future<void> handleUserEmailVerification(BuildContext context, {@required User user}) async {
        if (user.isEmailVerified) {
          // Navigate the user into the app
        } else {
          // Tell the user to go verify their mail
        }
     }

您还可以使用此handleUserEmailVerification方法进行登录。

登录用户

Future<void> signInUser(BuildContext context) async {
  final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
  User firebaseUser = await firebaseAuth
        .signInWithEmailAndPassword(
          email: loginEmailController.text,
          password: loginPasswordController.text,
  );

  await handleUserEmailVerification(context, user: firebaseUser);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM