Сообщение об ошибке от пользовательской проверки Yup не исчезает - PullRequest
2 голосов
/ 18 января 2020

Я хочу проверить наличие дубликатов электронной почты в рамках процесса регистрации, используя пользовательскую проверку от Yup:

validationSchema={yup.object().shape({
    email: yup
        .string()
        .email()
        .test({
            name: 'duplicate-email-check',
            params: 'value',
            message: 'Duplicate email already exists',
            test: async (value) => {
                firebase
                    .auth()
                    .fetchSignInMethodsForEmail(value)
                    .then(result => {
                        if (result === "password") {
                            return false
                        } else {
                            return true
                        }
                    })
                    .catch(err => console.log(err))
            }
        })
        .required(),
})}

Я использую fetchSignInMethodsForEmail для получения любых учетные записи с тем же адресом электронной почты, и, если он существует, будет выдано сообщение об ошибке проверки. Я моделирую после схемы mixed (). Text () , но проблема в том, что сообщение об ошибке «Дублирующаяся электронная почта уже существует» не исчезает, как только появляется, даже если нет дублирующейся электронной почты.

1 Ответ

0 голосов
/ 18 января 2020

Эта часть вашего кода не возвращает Обещание, которое возвращает логическое значение для test

test: async (value) => { // Notice this, adding curly braces will require you to put a return statement
                firebase
                    .auth()
                    .fetchSignInMethodsForEmail(value)
                    .then(result => {
                        if (result === "password") {
                            return false
                        } else {
                            return true
                        }
                    })
                    .catch(err => console.log(err))
            }

. Вы можете изменить код на:

test: async (value) => { // Notice this, adding curly braces will require you to put a return statement
                return firebase // Notice I added the return statement
                    .auth()
                    .fetchSignInMethodsForEmail(value)
                    .then(result => {
                        if (result === "password") {
                            return false
                        } else {
                            return true
                        }
                    })
                    .catch(err => console.log(err))
            }
...