hapi route joi验证密码确认

hapi route joi validation of password confirmation

如何检查密码和 password_confirmation 是否相同?

var Joi = require('joi'),
S = Joi.string().required().min(3).max(15);
exports.create = {
   payload: {
            username: S,
            email: Joi.string().email(),
            password: S,
            password_confirmation:  S
   }
}

您可以使用 Joi.any().valid() with Joi.ref():

password: Joi.string().min(3).max(15).required(),
password_confirmation: Joi.any().valid(Joi.ref('password')).required().options({ language: { any: { allowOnly: 'must match password' } } })

如果您收到 "language" is not allowed 错误消息。哦,你来对地方了。

现在,2020 年和 Joi v17.2.1 我们可以使用 Joi.any().equal()Joi.any().valid()Joi.ref() 以及自定义消息 messages():

password: Joi.string().min(3).max(15).required().label('Password'),
password_confirmation: Joi.any().equal(Joi.ref('password'))
    .required()
    .label('Confirm password')
    .messages({ 'any.only': '{{#label}} does not match' })

或使用options()

password: Joi.string().min(3).max(15).required().label('Password'),
password_confirmation: Joi.any().equal(Joi.ref('password'))
    .required()
    .label('Confirm password')
    .options({ messages: { 'any.only': '{{#label}} does not match'} })

如果不匹配,验证错误将显示 ValidationError: "Confirm password" does not match
如果没有通过 password_confirmation.

则显示 ValidationError: "Confirm password" is required

希望对大家有用。