1.加解密使用的是bcrypt.js
这里我是在我的客户端只提供一个用户名,然后密码是自动分配的,默认是123456
在/serives/user/index.js文件中
const model = require("../../models/user"); const actions = require("../actions"); function create(req, res) { //初始化密码"123456"" actions.create(model, { ...req.body, password: "123456" }, res); }这里密码是服务端默认添加的,此处为明文,入库前要将明文转换为密文 在/models/user.js 文件中添加对密码的再处理
const bcrypt = require("bcryptjs"); ......省略 password: { type: String, trim: true, set(value) { return bcrypt.hashSync(value, 10); //value 为传入的明文密码 }, },这样,就实现了入库前的加密
2.登录接口中使用解密
用户登录将用户名提交到登录接口,登录接口拿到request参数后,先查找有无改用户名,找到了就对比密码,此处用到bcrypt解密对照,如果对比成功,那么生成该用户的token串,放用户的唯一标识_id
const bcrypt = require("bcryptjs"); ......省略 function login(model, params, res) { const { userName, password } = params; model.findOne({ userName }, (error, data) => { if (error) { res.json(respHandle(error, data)); } if (data) { const flag = bcrypt.compareSync(password, data.password); if (!flag) { res.json(loginException("E001", "密码不正确")); } else { const token = jwt.sign({ id: data._id }, process.env.SECRET_KEY); res.json(respHandle(error, { userName, token })); } } else { res.json(loginException("E001", "用户不存在")); } }); }bcrypt加密: bcrypt.hashSync(value, 10) bcrypt解密对比: bcrypt.compareSync(password, data.password), 参数1: 客户端提交的明文密码, 参数2: 数据库存贮的密文密码