思路:
1.定义路由和处理函数
2.验证表单数据
3.根据 id 查询用户是否存在
4.判断提交的 旧密码 是否正确:
5.对新密码进行 bcrypt 加密之后,更新到数据库中:
一、定义路由和处理函数
var express = require("express"); var router = express.Router(); // 引入封装的获取验证码的方法 var userInfo_function = require("../controllers/userInfo"); // 1.导入验证数据的中间件 const expressJoi = require("@escook/express-joi"); // 引入封装的方法 var userInfo_function = require("../controllers/userInfo"); // 1.导入验证数据的中间件 const expressJoi = require("@escook/express-joi"); // 2.导入需要的验证规则对象 const { update_Password_schema } = require("../schema/user"); // 重置密码 router.post( "/updatePwd", expressJoi(update_Password_schema), userInfo_function.updatePassword ); module.exports = router;
// 重置密码 exports.updatePassword = (req, res) => { console.log("req.user.id", req.user.id); // console.log("req.body.id", req.body); // 根据id查询用户是否存在 // 定义根据id 查询用户数据的sql语句 const sql = "select * from ev_users where id=?"; //执行 SQL 语句查询用户是否存在 db.query(sql, req.user.id, (err, results) => { console.log("请求体", req.body); console.log("旧密码", req.body.oldPwd) // console.log("数据库中的密码", results[0].password); // 执行sql语句失败 if (err) return res.cc(err); // 执行sql语句成功检查results.length为1 if (results.length !== 1) return res.cc("用户不存在"); // 判断提交的旧密码是否正确 // 使用 bcrypt.compareSync(提交的密码,数据库中的密码) 方法验证密码是否正确 // compareSync() 函数的返回值为布尔值,true 表示密码正确,false 表示密码错误 const compareResult = bcrypt.compareSync(req.body.oldPwd,results[0].password); if (!compareResult) return res.cc("原密码错误"); // 对新密码进行bcrypt加密之后更新到数据库中 // 定义更新用户密码的sql语句 const sqlPwd = "update ev_users set password=? where id=?"; // 对新密码进行bcrypt加密处理 const newPwd = bcrypt.hashSync(req.body.newPwd, 10); console.log("新密码", newPwd); // 执行sql语句,根据id更新用户的密码 db.query(sqlPwd, [newPwd, req.user.id], (err, results) => { // 执行sqL语句失败 if (err) return res.cc(err); // sql语句执行成功,但是影响行数不等于1 if (results.affectedRows !== 1) return res.cc("更新密码失败!"); // 更新密码成功 res.cc("更新密码成功!", 0); }); }); };