hapi route joi验证密码确认

Whi*_*her 7 node.js hapijs joi

如何检查密码和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
   }
}
Run Code Online (Sandbox Code Playgroud)

Ger*_*osi 25

你可以用Joi.any().valid()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' } } })
Run Code Online (Sandbox Code Playgroud)

  • 我开始使用“是的”,我的生活变得更容易...比你想象的更容易...我创建了非常动态的形式,具有非常奇怪的功能,但从未遇到这个库的任何限制,而且它与 Joi 相同,所以如果你有使用“Joi”的背景,你可以轻松切换到“Yup” (2认同)

Tha*_*gLe 17

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

现在,2020 年和 Joi v17.2.1,我们可以使用Joi.any().equal()or Joi.any().valid()withJoi.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' })
Run Code Online (Sandbox Code Playgroud)

或使用 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'} })
Run Code Online (Sandbox Code Playgroud)

ValidationError: "Confirm password" does not match如果不匹配,将显示验证错误。
并显示ValidationError: "Confirm password" is required你是否没有通过password_confirmation

希望对有些人有用。