Подтверждение пароля и пароль совпадают, но проверка все еще вызывает JOI в компоненте React - PullRequest
0 голосов
/ 26 июня 2019

Я создаю форму регистрации, и проблемы возникают при попытке подтвердить подтверждение пароля. Я использую последнюю версию JOI-Browser.

Я попробовал код ниже и ошибка проверки была вызвана, хотя пароль и подтверждение пароля имеют те же значения.

password: Joi.string()
      .min(5)
      .required(),
passwordConfirmation: Joi.ref("password")

Вот мой объект состояния:

password: "12345"
passwordConfirmation: "12345"
username: ""
errors: {…}
passwordConfirmation: "\"passwordConfirmation\" must be one of [ref:password]"

Я провел несколько часов, пробуя несколько подходов и читая документацию, но все равно не повезло, проверка все еще запускается,

У меня есть другие проверки в этой форме, и они отлично работают.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Я узнаю, что происходит. Мой код выше был прав, проблема была в моей функции проверки.

Комментарий Габриэля о Петриоли выручил меня. эта функция вызывает у меня проблемы:

validateProperty = ({ name: propertyName, value }) => {
const obj = { [propertyName]: value };
const schema = { [propertyName]: this.schema[propertyName] };

const { error } = Joi.validate(obj, schema);

return error ? error.details[0].message : null;};

Вы можете видеть, что я пытался проверить каждое свойство индивидуально, чтобы я мог сделать форму mora динамичной.

Это вызывает ошибку проверки, потому что когда я пытаюсь проверить validPassword, в пароле не было никакого значения, потому что я передал только значение, соответствующее ПодтверждениюPassword, ему также понадобилось значение пароля для сравнения.

Ошибка новичка

0 голосов
/ 27 июня 2019

Я не думаю, что Joi.ref следует использовать таким образом.

Я обычно склонен делать это так:

const passwordConfirmation = Joi.string()
  .required()
  .valid(Joi.ref('password'))
  .options({
    language: {
      any: {
        allowOnly: '!!Passwords do not match',
      }
    } 
  })

Если вы ссылаетесь на документы , вы увидите:

Обратите внимание, что ссылки могут использоваться только в тех случаях, когда они явно поддерживаются, например, в правилах valid () или invalid ().Если нужны восходящие (родительские) ссылки, используйте object.assert ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...