ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

express.js+mysql实现重置密码功能

2026/9/10 19:20:07 拓冰建站 浏览量
express.js+mysql实现重置密码功能

思路:
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为1if (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语句执行成功,但是影响行数不等于1if (results.affectedRows !== 1) return res.cc("更新密码失败!");// 更新密码成功res.cc("更新密码成功!", 0);});});
};