【问题标题】:How to check confirm password with zod如何用zod查看确认密码
【发布时间】:2023-02-13 06:29:14
【问题描述】:

如何使用 zod 检查确认密码?我想用 Zod 验证确认密码。我希望 Zod 将我的密码与 comparePassword 进行比较

export const registerUSerSchema = z.object({
    firstName: z.string(),
    lastName: z.string(),
    userName: z.string(),
    email: z.string().email(),
    phone: z.string().transform(data => Number(data)),
    password: z.string().min(4),
    confirmPassword: z.string().min(4),
    avatar: z.string().optional(),
    isVerified: z.boolean().optional()
})

【问题讨论】:

    标签: node.js typescript express validation zod


    【解决方案1】:

    您可以通过添加 superRefine 来实现此目的

    export const registerUserSchema = z.object({
        firstName: z.string(),
        lastName: z.string(),
        userName: z.string(),
        email: z.string().email(),
        phone: z.string().transform(data => Number(data)),
        password: z.string().min(4),
        confirmPassword: z.string().min(4),
        avatar: z.string().optional(),
        isVerified: z.boolean().optional()
    }).superRefine(({ confirmPassword, password }, ctx) => {
      if (confirmPassword !== password) {
        ctx.addIssue({
          code: "custom",
          message: "The passwords did not match"
        });
      }
    });
    

    如果密码由于基本原因(至少 4 个字符)而无法解析,则该错误将出现,但如果整个基本对象成功解析,则将进行超级细化检查。

    【讨论】:

    • 好的。谢谢。因为我使用的是 MVC,所以我决定让我们if statement 在我的控制器逻辑中实现它。万一下次,我会遵循这种方法。 if (record.password != record.confirmPassword) { throw "Password and Confirm password didn't match"; }
    • 如果您希望将错误绑定到该字段,请确保将 path: ['confirmPassword'] 添加到传递给 addIssue 方法的对象
    【解决方案2】:

    我有这样的:

    const validationSchema = z
        .object({
            name: string().min(1, { message: "Name is required" }), // pass custom message
            email: string().email(),
            website: string().optional(),
            country: string(),
            password: string(),
            confirm: string(),
        })
        .refine((data) => data.password === data.confirm, {
            message: "Passwords don't match",
            path: ["confirm"],
        });
    

    我正在使用 React Hook 表单。

    这里有一些文档,我复制并粘贴给你,所以你可以看到它是如何工作的:https://docs.google.com/document/d/1jqTth88I-D0-qzq34B4sUGbp8wGmExS7kpc78QA_4sk/edit?usp=sharing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多