|
@@ -3,7 +3,9 @@
|
|
|
const Service = require('egg').Service;
|
|
|
const assert = require('assert');
|
|
|
const moment = require('moment');
|
|
|
-const crypto = require('crypto');
|
|
|
+// const crypto = require('crypto');
|
|
|
+const sm3 = require('sm3');
|
|
|
+const uuid = require('uuid');
|
|
|
class adminUserService extends Service {
|
|
|
async create({ acct, password, userName, phone, state, roleList }) {
|
|
|
assert(acct, '帐号不存在');
|
|
@@ -14,10 +16,12 @@ class adminUserService extends Service {
|
|
|
const user = await model.find({ acct });
|
|
|
if (user.length > 0) return { errmsg: '帐号已存在', errcode: -2001 };
|
|
|
const createAt = moment().format('x');
|
|
|
- const hash = crypto.createHmac('sha256', this.app.config.userSecret);
|
|
|
- const pwa = hash.update(password).digest('hex');
|
|
|
+ // 生成uuid盐值
|
|
|
+ const salt = uuid.v1();
|
|
|
+ // sm3 加盐加密
|
|
|
+ password = sm3(`${password}:${salt}`);
|
|
|
try {
|
|
|
- const res = await model.create({ acct, password: pwa, userName, phone, createAt, state, roleList });
|
|
|
+ const res = await model.create({ acct, password, userName, phone, createAt, state, roleList });
|
|
|
return { errmsg: '', errcode: 0, res };
|
|
|
} catch (error) {
|
|
|
console.log(error);
|
|
@@ -27,10 +31,11 @@ class adminUserService extends Service {
|
|
|
async update({ userName, phone, _id, roleList, state, password }) {
|
|
|
assert(_id, 'id不存在');
|
|
|
const { AdminUser: model } = this.ctx.model;
|
|
|
+ const user = await model.findOne({ _id });
|
|
|
try {
|
|
|
if (password) {
|
|
|
- const hash = crypto.createHmac('sha256', this.app.config.userSecret);
|
|
|
- password = hash.update(password).digest('hex');
|
|
|
+ // sm3 使用数据库存储的盐值 加密
|
|
|
+ password = sm3(`${password}:${user.salt}`);
|
|
|
}
|
|
|
await model.findById(_id).update({ userName, phone, roleList, state, password });
|
|
|
return { errmsg: '', errcode: 0 };
|
|
@@ -42,15 +47,16 @@ class adminUserService extends Service {
|
|
|
async pwdUpdate({ password, userName, confirmPwd }) {
|
|
|
assert(userName, '用户名不存在');
|
|
|
const { AdminUser: model } = this.ctx.model;
|
|
|
- const hash = crypto.createHmac('sha256', this.app.config.userSecret);
|
|
|
- const cpwd = hash.update(confirmPwd).digest('hex');
|
|
|
+ const user = await model.findOne({ userName });
|
|
|
+ if (!user) return { errcode: -1001, errmsg: '用户不存在', data: '' };
|
|
|
+ const cpwd = sm3(`${confirmPwd}:${user.salt}`);
|
|
|
+ if (user.password !== cpwd) return { errcode: -1001, errmsg: '原密码不正确', data: '' };
|
|
|
try {
|
|
|
const res = await model.findOne({ userName });
|
|
|
if (res.password !== cpwd) {
|
|
|
return { errmsg: '原密码错误', errcode: -2003 };
|
|
|
}
|
|
|
- const hash = crypto.createHmac('sha256', this.app.config.userSecret);
|
|
|
- password = hash.update(password).digest('hex');
|
|
|
+ password = sm3(`${password}:${user.salt}`);
|
|
|
await model.findByIdAndUpdate(res._id, { password });
|
|
|
return { errmsg: '', errcode: 0 };
|
|
|
} catch (error) {
|
|
@@ -77,9 +83,9 @@ class adminUserService extends Service {
|
|
|
let res;
|
|
|
const total = await model.find({ ...filter });
|
|
|
if (skip && limit) {
|
|
|
- res = await model.find({ ...filter }, { password: false }).skip(Number(skip) * Number(limit)).limit(Number(limit));
|
|
|
+ res = await model.find({ ...filter }, { password: false, salt: false }).skip(Number(skip) * Number(limit)).limit(Number(limit));
|
|
|
} else {
|
|
|
- res = await model.find({ ...filter }, { password: false });
|
|
|
+ res = await model.find({ ...filter }, { password: false, salt: false });
|
|
|
}
|
|
|
return { errmsg: '', errcode: 0, data: res, total: total.length };
|
|
|
} catch (error) {
|