如何使用zod检查确认密码

Ush*_*hir 34 validation node.js express typescript zod

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

Sou*_*man 50

您可以通过附加一个来实现这一点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"
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您希望将错误绑定到该字段,请确保将“path: ['confirmPassword']”添加到传递给“addIssue”方法的对象中 (24认同)

fru*_*oaf 35

我有这样的:

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"],
    });
Run Code Online (Sandbox Code Playgroud)

我正在使用 React Hook 表单。

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


Ngu*_*uấn 5

您可以实现refine这样的功能:

const passwordForm = z
  .object({
    password: z.string(),
    confirmPassword: z.string(),
  })
  .refine((data) => data.password === data.confirmPassword, {
    message: "Passwords don't match",
    path: ["confirmPassword"], // path of error
  });

passwordForm.parse({ password: "asdf", confirmPassword: "qwer" });
Run Code Online (Sandbox Code Playgroud)