eggjs + crypto-js 的 DES 加密实现重置密码接口?
Posted 凯小默:树上的男爵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eggjs + crypto-js 的 DES 加密实现重置密码接口?相关的知识,希望对你有一定的参考价值。
实现过程
1.安装 crypto-js
npm install crypto-js -S
2.路由层 router.js 添加路径
// 重置用户密码
router.post('/api/user/resetPassword', verify_token, controller.user.resetPassword);
3.控制层 user.js 添加方法
'use strict';
const Controller = require('egg').Controller;
const CryptoJS = require("crypto-js");
function DES_decrypt(decryptStr)
return CryptoJS.DES.decrypt(
ciphertext: CryptoJS.enc.Hex.parse(decryptStr)
,
CryptoJS.enc.Utf8.parse("ABF"),// keyHex
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
// option
).toString(CryptoJS.enc.Utf8);
class UserController extends Controller
// 重置密码
async resetPassword()
const ctx, app = this;
try
// 0、获取用户输入的 oldPassword newPassword
const oldPassword, newPassword = ctx.request.body;
const old_password = DES_decrypt(oldPassword);
const new_password = DES_decrypt(newPassword);
console.log('解密--old-->', oldPassword, old_password)
console.log('解密--new-->', newPassword, new_password)
// 1、获取请求头 authorization 属性,值为 token
const token = ctx.request.header.authorization;
// 2、用 app.jwt.verify(token, app.config.jwt.secret),解析出 token 的值
const decode = await app.jwt.verify(token, app.config.jwt.secret);
// 3、校验是否 token 可以,需要在鉴权中间件里加返回
if(!decode) return;
// 4、根据用户名,在数据库查找相对应的id操作
const userInfo = await ctx.service.user.getUserByName(decode.username);
// 5、校验是否通过
if (old_password !== userInfo.password)
ctx.body =
status: 400,
desc: '原密码错误',
data: null
;
return;
// 6、通过 service 方法 resetPassword 修改 password 信息
const result = await ctx.service.user.resetPassword(
...userInfo,
password: new_password
);
// 返回 token
ctx.body =
status: 200,
desc: '更新成功',
data: null
;
catch (error)
ctx.body =
status: 500,
desc: '更新失败',
data: null
module.exports = UserController;
4.服务层 user.js 添加方法
// 重置密码
async resetPassword(params)
const app = this;
try
// 通过 app.mysql.update 方法更新 user 表, 通过 id 筛选用户
const result = await app.mysql.update('user',
...params ,
id: params.id
);
return result;
catch(error)
console.log(error);
return null;
5.测试接口
我们在apifox上面新增接口,然后进行测试
首先我们先登录拿到token,然后用 kaimo313
这个账号,密码是 123456
。修改为 123
.
先拿到 DES 加密字符串
'123': newPassword: "a50d7e4459c234f1"
'123456': oldPassword: "d18bb870a7d5664f"
参考资料
以上是关于eggjs + crypto-js 的 DES 加密实现重置密码接口?的主要内容,如果未能解决你的问题,请参考以下文章