如何在React Native中检查Firebase中的电子邮件是否已验证?
如何在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')。
问题的原因是没有正确获取表单中的值。解决方法是在登录流程中添加验证步骤,调用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' }); } }
在登录前获取表单的值,判断值是否存在,如果为空则显示相应提示信息。通过这样的修复,可以解决邮箱未验证时仍然能够登录的问题。