hapi route joi 验证密码确认

Posted

技术标签:

【中文标题】hapi route joi 验证密码确认【英文标题】:hapi route joi validation of password confirmation 【发布时间】:2015-07-01 20:28:46 【问题描述】:

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

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
   

【问题讨论】:

【参考方案1】:

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

【讨论】:

onSubmit 它工作正常,但在onChange 上,即使两个字段相同,也会出现错误:( @FaisalJanjua 我也遇到了同样的问题,你解决了吗? @Amr 我在使用 Joi 并且有 1 年多的经验,由于这个库中的许多基本问题,我真的很失望。 我开始使用Yup,我的生活变得更轻松......比你想象的要多......我创建了非常动态的表单,具有非常奇怪的功能,但从未遇到过这个库的任何限制,此外它和 Joi 一样,所以如果你有使用 Joi 的背景,你可以轻松切换到 Yup codechips.me/svelte-form-validation-with-yup 这是如何开始的简单示例:)【参考方案2】:

如果您收到 "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

希望对某些人有用。

【讨论】:

以上是关于hapi route joi 验证密码确认的主要内容,如果未能解决你的问题,请参考以下文章

Joi 验证正则表达式或模式

React Native --- 找不到模块 '@hapi/joi' 需要堆栈

知名Node.js框架系列之:我看hapi(哈啤)

Joi 验证器条件模式

验证密码和确认密码

[Hapi.js] Request Validation with Joi