Egg框架搭建后台服务【4】- 密码加密校验

需求

在公开环境中,用户的密码不能出现明文传输的情况,一方面是防止有第三方软件拦截请求获取密码,一方面防止用明文密码撞库。

开发

安装

密码采用 MD5 进行加密,当然也推荐更高级的加密方案,这里因为不存在非常重要的数据,采用 MD5 是性价比较高的。

安装 crypto.js 库

npm i --save crypto-js

加密

在 login 接口前调用加密算法

import CryptoJS from "crypto-js";

// 加密
const payload = {
	...loginForm,
	password: CryptoJS.MD5(values.password).toString()
}

login(payload).then(......)

校验

const userInfo = await app.model.User.findOne({where: {user: params.user}});
if (userInfo && userInfo.password === params.password) {
	ctx.state = 200;
	ctx.body = {
		code: 200,
		success: true,
		data: {token: 123},
		msg: '欢迎回来,' + userInfo.name,
		show: true
	}
} else {
	ctx.body = {
		code: 400,
		success: false,
		msg: '用户名或密码错误',
		show: true
	}
}

总结

加密方案其实很多,但是我更推荐非对称加密。对称加密方案虽然也非常好,但是不可避免地可能出现密钥泄露,而且密码校验本身就是校验,不需要知道密码是什么。

另外因为我这个博客系统就我自己用,其实 server 部分直接写死 password 也可以,省下一张表。

你可能感兴趣的:(Egg,egg)