如何使用zod检查确认密码

How to check confirm password with zod

提问人:Ushahemba Shir 提问时间:9/13/2022 更新时间:11/17/2023 访问量:28038

问:

如何使用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()
})
节点 .js 打字稿 效验证 zod

评论


答:

37赞 Souperman 9/13/2022 #1

你可以通过处理一个超级精炼来实现这一点

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 个字符)而无法解析,则会出现该错误,但如果整个基本对象成功解析,则将发生超级优化检查。

评论

0赞 Ushahemba Shir 9/14/2022
好。谢谢。由于我使用的是 MVC,因此我决定在控制器逻辑中实现它。如果下次,我将遵循这种方法。if statementif (record.password != record.confirmPassword) { throw "Password and Confirm password didn't match"; }
17赞 jrnxf 10/3/2022
如果希望将错误绑定到该字段,请确保添加到传递给方法的对象中path: ['confirmPassword']addIssue
0赞 Ejiro Asiuwhu 2/23/2023
请务必添加,因为它为您提供了一个键来显示错误消息pathctx.addIssue({ code: 'custom', message: 'passwords do not match', path: ['confirm'], });
24赞 fruitloaf 2/13/2023 #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 Form。

以下是一些文档,我为您复制并粘贴,因此您可以了解其工作原理: https://docs.google.com/document/d/1jqTth88I-D0-qzq34B4sUGbp8wGmExS7kpc78QA_4sk/edit?usp=sharing

3赞 Nguyễn Anh Tuấn 5/3/2023 #3

您可以实现如下功能: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" });