express开发服务端------加解密问题

it2023-06-12  72

新建用户接口,加密密码后才存贮到数据库

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: 数据库存贮的密文密码

最新回复(0)