思路:
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);
});
});
};