使用bcryptjs@2.4.3进行加密

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: "用户名错误",
        });
      }
    }
  );
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值