hapi route joi验证密码确认

时间:2015-04-23 14:51:29

标签: 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
   }
}

2 个答案:

答案 0 :(得分:21)

您可以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' } } })

答案 1 :(得分:5)

如果收到"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
如果没有通过ValidationError: "Confirm password" is required,请显示password_confirmation

希望对某些人有用。