如何在React Native中检查Firebase中的电子邮件是否已验证?

7 浏览
0 Comments

如何在React Native中检查Firebase中的电子邮件是否已验证?

我的Firebase技能很基础,我想要的是,只有已验证邮箱的用户才能进入应用程序,如果没有验证,则显示未验证的电子邮件的错误。这是我的代码:

login (){
    const user = firebase.auth().currentUser;
    const emailVerified = user.emailVerified;
    const validate = this.refs.formId.getValue();
    if (validate && emailVerified != 'false') {
        firebase.auth().signInWithEmailAndPassword(validate.email, validate.password)
        .then(() => {
        })
        .catch((error) => {
            const errorCode = error.code;
            const errorMessage = error.message;
            if (errorCode === 'auth/wrong-password') {
            Toast.show({ text: '密码错误!', position: 'bottom', buttonText: '再试一次' })
            if (emailVerified === 'false') {
            Toast.show({ text: '电子邮件未验证!', position: 'bottom', buttonText: '再试一次' })
            }else{
            Toast.show({ text: '发生错误!', position: 'bottom', buttonText: '再试一次' })
            }
        });
    }
}

我收到了这个错误:null不是一个对象(评估'user.emailVerified')

0
0 Comments

问题的原因是没有正确获取表单中的值。解决方法是在登录流程中添加验证步骤,调用signInWithEmailAndPassword方法后,通过onAuthStateChanged监听用户登录状态,判断用户是否已验证邮箱。如果邮箱未验证,则显示相应提示信息;如果验证通过,则执行成功登录的操作。以下是修复后的代码:

login (){
  const validate = this.refs.formId.getValue();  // 获取表单中的值
  if (validate) {  // 判断值是否存在
    firebase.auth().signInWithEmailAndPassword(validate.email, validate.password).catch(function(error) {
      // 处理错误
      var errorCode = error.code;
      var errorMessage = error.message;
      if (errorCode === 'auth/wrong-password') {
        Toast.show({ text: 'Wrong password!', position: 'bottom', buttonText: 'Try Again' });
      }
    });
    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        if (user.emailVerified === false) {
          Toast.show({ text: 'Email Not Verified!', position: 'bottom', buttonText: 'Try Again' });
        } else {
          // 邮箱验证通过,执行成功登录的操作
        }
      } else {
        // 用户未登录
      }
    });
  } else {
    // 表单值为空
    Toast.show({ text: 'Form is empty!', position: 'bottom', buttonText: 'Try Again' });
  }
}

在登录前获取表单的值,判断值是否存在,如果为空则显示相应提示信息。通过这样的修复,可以解决邮箱未验证时仍然能够登录的问题。

0