Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yup schema validation password and confirmPassword doesn't work

import * as Yup from 'yup'; import User from '../models/User';  class UserController { async store(req, res) { const schema = Yup.object().shape({   name: Yup.string().required(),   email: Yup.string()     .email()     .required(),   password: Yup.string()     .required()     .min(6), });  if (!(await schema.isValid(req.body))) {   return res.status(400).json({ error: 'Validation fails' }); }  const userExists = await User.findOne({ where: { email: req.body.email } }); if (userExists) {   return res.status(400).json({ error: 'User already exists.' }); } const { id, name, email, provider } = await User.create(req.body); return res.json({ id, name, email, provider }); }  async update(req, res) { const schema = Yup.object().shape({   name: Yup.string(),   email: Yup.string().email(),   oldPassword: Yup.string().min(6),   password: Yup.string()     .min(6)     .when('oldPassword', (oldPassword, field) =>       oldPassword ? field.required() : field     ),   confirmPassword: Yup.string().when('password', (password, field) =>     password ? field.required().oneOf([Yup.ref('password')]) : field   ), });  if (!(await schema.isValid(req.body))) {   return res.status(400).json({ error: 'Validation fails' }); }  const { email, oldPassword } = req.body; const user = await User.findByPk(req.userId); if (user.email !== email) {   const userExists = await User.findOne({     where: { email },   });   if (userExists) {     return res.status(400).json({ error: 'User already exists.' });   } }  if (oldPassword && !(await user.checkPassword(oldPassword))) {   return res.status(401).json({ error: 'Password does not match.' }); }  const { id, name, provider } = await user.update(req.body);  return res.json({ id, name, email, provider });   }   } export default new UserController(); 

here it creates a normal user with the password 123456

here it should work, since the old password is the same as the password of the created user, and it should update the new password

I want to try to understand how to make him understand the current password as oldpassword and update the password

like image 661
Player Josu Avatar asked May 18 '20 04:05

Player Josu


People also ask

How can I validate password and confirm password in Yup?

This can be done with Yup's ref function. We are able to reference the value of password with ref . We use the oneOf function to ensure that passwordConfirmation either matches password or if it is left blank and matches null then it passes the validation for the time being.

How does Formik validate password and confirm password?

To compare if a password is the same as a confirmPassword we can use ref and reference our password field. We use the oneOf option and say that the confirmPassword should be oneOf a reference. Meaning it should match password.


1 Answers

Try this out:

import * as Yup from 'yup';  validationSchema: Yup.object({   password: Yup.string().required('Password is required'),   passwordConfirmation: Yup.string()      .oneOf([Yup.ref('password'), null], 'Passwords must match') }); 
like image 195
Harshal Avatar answered Sep 18 '22 12:09

Harshal