node.js - bcrypt模块

该模块为加密模块:

  • 加密方式:哈希加密(hash)。
    • 哈希加密是单程加密方式,只可以加密,不可以解密。

注意:

  • 该方法都是异步API,需要使用 await 来等待一下,不要忘记 await 需要配合 async 使用哦!!

0x01 密码加密步骤:

1、首先下载bcrypt这个库。

npm install bcrypt

2、然后导包。

const bcrypt = require("bcrypt");

3、使用 genSalt() 方法 生成 ‘盐’。

  • 参数:
    • 加密复杂程度,越大越复杂。默认为:10,当然,越大也越慢。
let salt = await bcrypt.genSalt(10);

4、使用 hash() 方法对密码进行加密。

  • 第一个参数:

    • 用户输入的明文密码。
  • 第二个参数:

    • 使用 genSalt() 生成的 ‘盐’ 。
let pass = await bcrypt.hash("明文密码", salt);

0x02 密码比对:

  • 虽然不能解密,但是它提供了一个密码比对的方法,可以判断密码输入的是否正确。

方法:

await bcrypt.compare('明文密码', '加密密码');
  • 明文密码就是用户现在输入的密码。

  • 加密密码是从数据库中读取出来的已经被加密的密码。

返回值:

  • 返回一个 Boolean 值。
    • 比对正确:true
    • 比对错误:false
//查询数据库
User.findOne({
    //只查询用户输入的账号
    account: req.body.account
})
    //由于 bcrypt.compare 使用了await,所以这里使用async。
    .then(async function(ret){
        //判断查询返回的是否是null,如果是null就是没有数据,那么返回账号密码错误。
        if(ret){
            //如果返回的对象,就是存在,然后密码比对,返回 Boolean 值。
            if(await bcrypt.compare(req.body.password, ret.password)){
                //返回true说明比对成功
                res.send({
                    message: "登录成功!",
                   code: 0
                });
            //返回 false 说明比对失败,返回账号密码错误
            }else{
                res.send({
                    message: "账号或密码错误!",
                    code: 1
                 });
            }
        }else{
            res.send({
               message: "账号或密码错误!",
               code: 1
            });
        }
    });

发表评论 / Comment

用心评论~