const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const { promisify } = require('util'); /** * 用户业务操作 */ const config = require('./../config.js'); const validator = require('validator') const userModel = require('./../models/user-info') const userCode = require('./../codes/user') const user = { /** * 创建用户 * @param {object} user 用户信息 * @return {object} 创建结果 */ async create(user) { let salt = await promisify(bcrypt.genSalt)(10); let pwd = await promisify(bcrypt.hash)(user.password, salt); user.password = pwd; let result = await userModel.create(user) return result }, /** * 更新用户 * @param {object} user 用户信息 * @return {object} 创建结果 */ async update(user, id) { let data = { ...user, modifiedTime: new Date().getTime() } // /不能修改用户名 delete data.username; // 不能修改邮箱 delete data.email; let resultData = await userModel.update(data, id) return resultData }, /** * 查找存在用户信息 * @param {object} formData 查找的表单数据 * @return {object|null} 查找结果 */ async getExistOne(formData) { let resultData = await userModel.getExistOne({ 'email': formData.email, 'username': formData.username }) return resultData }, /** * 根据ID查找存在用户信息 * @param {object} formData 查找的表单数据 * @return {object|null} 查找结果 */ async getExistOneByIdOrUserName(formData) { let resultData = await userModel.getExistOneByIdOrUserName({ 'id': formData.id }) if (resultData) { return resultData[0]; } return resultData }, /** * 登录Token获取 * @param {object} formData 登录表单信息 * @return {object} 登录业务操作结果 */ async validatorPwd(formData, rowData) { let token = ''; let isSame = await promisify(bcrypt.compare)(formData.password, rowData.password); if (isSame) { // 1小时的登录时间 token = jwt.sign({ id: rowData.id, username: rowData.username, }, config.share_key, { expiresIn: '1h' }); token = 'Bearer ' + token; } return token }, /** * 根据用户名查找用户业务操作 * @param {string} userName 用户名 * @return {object|null} 查找结果 */ async getUserInfoByUserName(userName) { let resultData = await userModel.getUserInfoByUserName(userName) || {} // let userInfo = { // // id: resultData.id, // email: resultData.email, // username: resultData.username, // detailInfo: resultData.detail_info, // createTime: resultData.create_time // } return resultData }, /** * 检验用户注册数据 * @param {object} userInfo 用户注册数据 * @return {object} 校验结果 */ validatorSignUp(userInfo) { let result = { success: false, message: '', data: null } if (/^[a-z0-9\_\-]{6,16}$/.test(userInfo.username || '') === false) { result.message = userCode.ERROR_USER_NAME return result } if (userInfo.email && !validator.isEmail(userInfo.email)) { ; result.message = userCode.ERROR_EMAIL return result } if (!/[\w+]{6,16}/.test(userInfo.password || '')) { result.message = userCode.ERROR_PASSWORD return result } if (userInfo.password !== userInfo.confirmPassword) { result.message = userCode.ERROR_PASSWORD_CONFORM return result } result.success = true return result }, /** * 检验用户必须的数据 * @param {object} userInfo 用户数据 * @return {object} 校验结果 */ validatorNeed(userInfo, needPwd = true) { let result = { success: false, message: '', } if (!userInfo.username && !userInfo.email) { result.success = false; result.message = '用户名或者邮箱不能为空' return result } if (userInfo.email && !validator.isEmail(userInfo.email)) { result.success = false; result.message = userCode.ERROR_EMAIL return result } if (needPwd && !userInfo.password) { result.success = false; result.message = '密码不能为空' return result } result.success = true return result } } module.exports = user