1.安装bcryptjs
npm install bcryptjs@2.4.3
2.在router_handler/user.js 中导入bcryptjs
const bcrypt=require('bcryptjs')
3. 在响应的function中使用hashsync()方法对密码进行加密
有两个参数 参数1:待加密的数据 参数2:安全性数字
// 对密码进行加密
userinfo.password = bcrypt.hashSync(userinfo.password, 10);
router_handler/user.js
// 用户注册
exports.userReguser = (req, res) => {
//获取客户端提交的参数
let userinfo = req.body;
// 校验参数是否合法
if (!userinfo.username || !userinfo.password) {
res.send({
status: 410,
message: "用户名或密码不能为空",
});
} else {
let sqlstr = "select * from ev_users where username=?";
// 判断数据库中是否有一样的用户名
db.query(sqlstr, userinfo.username, (err, result) => {
if (err) return console.log(err.message);
if (result && result.length != 0) {
res.send({
status: 410,
message: "用户名已被占用,请更换用户名后重试",
});
} else {
// 对密码进行加密
userinfo.password = bcrypt.hashSync(userinfo.password, 10);
// 用户名没被占用 向数据库中 添加对应的用户
let addsql = "insert into ev_users set ?";
// 由于客户端发送的参数可能存在其他不需要的参数 所有服务端在执行sql传入的时候可以指定参数
// userinfo修改为{username:userinfo.username,password:userinfo.password,}
db.query(addsql, userinfo, (err, result) => {
if (err) return console.log(err.message);
if (result.affectedRows === 1) {
res.send({
status: 200,
message: "注册成功",
});
} else {
res.send({
status: 500,
message: "注册用户失败,请稍后再试",
});
}
});
}
});
}
};
结果:
登录接口判断密码是否正确
使用bcrypt.compareSync方法进行比较
// 判断密码是否正确 两个参数 参数1:客户端传的密码 参数2:数据库中存的加密的密码
// 返回ture 或 false
let comppareresult = bcrypt.compareSync(
userinfo.password,
result[0].password
);
示例:
// 用户登录
exports.userLogin = (req, res) => {
let userinfo = req.body;
db.query(
"select * from ev_users where username=? ",
[userinfo.username],
(err, result) => {
if (result && result.length != 0) {
// 判断密码是否正确 两个参数 参数1:客户端传的密码 参数2:数据库中存的加密的密码
// 返回ture 或 false
let comppareresult = bcrypt.compareSync(
userinfo.password,
result[0].password
);
if (comppareresult) {
// 生成token 注意 生成token时先剔除 密码 和 头像信息
// 使用 JWT 的sign方法生成 JWT字符串 三个参数分别是 用户信息 密钥 配置(有效时长)
let user = { ...result[0], password: "", user_pic: "" };
let token = jwtModule.jwt.sign(
user, //用户信息
jwtModule.secretKey, //密钥
jwtModule.expiresIn //有效期
);
res.send({
status: 200,
message: "登录成功",
token: "Bearer " + token,
});
} else {
res.cc("密码错误", 500);
}
} else {
res.send({
status: 500,
message: "用户名错误",
});
}
}
);
};