Проверка того, является ли пользователь владельцем адреса электронной почты в firebase

# #javascript #reactjs #firebase #firebase-authentication

Вопрос:

Я пытаюсь аутентифицировать пользователя с помощью firebase.

Для аутентификации на основе электронной почты и пароля я хочу проверить, действительно ли электронное письмо, введенное пользователем в форме, принадлежит пользователю, я могу сделать это, отправив ссылку для подтверждения пользователю.

Итак, после того, как форма отправлена и все остальные проверки завершены, я попробовал следующий код:

 firebase.auth().createUserWithEmailAndPassword(this.state.email,this.state.password)
        .then(()=>{
            var actionCodesettings={
                url: 'https://localhost:3000/?email='   firebase.auth().currentUser.email,
                handleCodeInApp: false
            }
            firebase.auth.currentUser.sendEmailVerification(actionCodesettings)
             .then(()=>{
               console.log("Email Sent")
             })
             .catch((error)=>{
                 console.log("Unexpected error occured")
             })

        })
        .catch((error)=>{
            var errorCode = error.code;
            if(errorCode === 'auth/email-already-in-use'){
                this.setState({
                    Message:"Email already Used"
                })
                return;
            }
            else if(errorCode === 'auth/invalid-email'){
                this.setState({
                    Message:"Email already Used"
                })
            return;
            }
            else if(errorCode === 'auth/weak-password'){
                this.setState({
                    Message:"Password is too Weak"
                })
            return;
            }
        })
    }
 

Но я не получаю никакого электронного письма,и сообщение «Отправлено по электронной почте» не выходит из системы.

Ответ №1:

Вы получаете синтаксическую ошибку, потому что вы использовали firebase.auth.currentUser вместо firebase.auth().currentUser .

Причина, по которой вы не видите эту ошибку, заключается в том, что вы игнорируете ее, не обрабатывая коды ошибок, которых вы не ожидаете. Хороший способ выявить эти типы ошибок-использовать switch инструкцию с default резервным случаем.

 firebase.auth().createUserWithEmailAndPassword(this.state.email,this.state.password)
    .then((result) => {
        var actionCodesettings={
            url: 'https://localhost:3000/?email='   result.user.email,
            handleCodeInApp: false
        }
        return result.user
            .sendEmailVerification(actionCodesettings);
    })
    .then(() => {
        this.setState({
            Message:"Please check your email to verify it."
        });
    })
    .catch((error)=>{
        const errorCode = error.code;
        switch (errorCode) {
            case 'auth/email-already-in-use':
                this.setState({
                    Message:"This email has already been used"
                });
                return;
            case 'auth/invalid-email':
                this.setState({
                    Message:"Email was invalid"
                });
                return;
            case 'auth/weak-password':
                this.setState({
                    Message:"Please use a more secure password"
                });
                return;
            default:
                console.error("Unexpected code while signing in and verifying user", error);
                this.setState({
                    Message:"Unexpected error. Please contact support."
                });
                return;
        }
    });