node.js - 是的架构验证密码和确认密码不起作用
问题描述
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();
在这里它应该可以工作,因为旧密码与创建用户的密码相同,它应该更新新密码
我想尝试了解如何让他将当前密码理解为 oldpassword 并更新密码
解决方案
试试这个:
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')
});
推荐阅读
- apache-spark - 有没有办法在 mapPartitions 中并行运行 for 循环?
- arrays - 在 PowerShell 中快速从 get-child 项目列表创建一个数组
- ms-access - SQL中没有负值的最小值
- mongodb - 如何在 MongoDB 聚合中 $count 和 $group?
- javascript - 如何查询数据库javascript sql lite3
- javascript - 反应不加载表单输入字段。没有错误,只是没有渲染
- php - WooCommerce:过去 30 天最畅销产品的自定义循环
- kotlin - KTOR - 在 POST 路由中解压缩文件
- php - phppgadmin 登录失败:- 虚拟类 -- 无法实例化
- dvc - 如何在不拉取整个文件夹内容的情况下将文件添加到 dvc 跟踪的文件夹?