在公开环境中,用户的密码不能出现明文传输的情况,一方面是防止有第三方软件拦截请求获取密码,一方面防止用明文密码撞库。
密码采用 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 也可以,省下一张表。