const router = require('express').Router(); const {paramFail, ServerError, success, controlError, searchSuccess} = require("../tools/result"); const c = require("../control/c_user"); const typeTool = require("../tools/typeTool_cjs"); const decode = require("../tools/decode_cjs"); const time = require("../tools/time_cjs"); const {toSqlString} = require("../tools/searchSql"); const progressField = require('../map/progressField'); const {isEmpty} = require("../tools/typeTool_cjs"); const checkLogin = require("../middleware/checkSession"); const log = require("../logger").logger("r_user","info"); router.post('/login', async (req, res) => { try{ // let isOk = null; let loginData = {}; // let {owner, passwd, captcha} = req.body; let body = req.body; if(isEmpty(body)){ paramFail(res, "body is required"); return; } let {owner, passwd, captcha} = req.body; if(!owner || !passwd || !captcha){ paramFail(res, "owner or password or captcha is required"); return; } // 检查验证码 if (captcha.toLowerCase() !== req.session.captcha) return paramFail(res,`验证码错误` ); // 转义解码参数 let safePasswd = toSqlString(passwd); owner = toSqlString(owner); // 解密模块. passwd = decode.decodePasswd(passwd); // 转为数据库存储数据 passwd = decode.passwdToSave(passwd); // 生成登陆记录 loginData = { loginIp: req.ip.match(/\d+\.\d+\.\d+\.\d+/), account: owner, passwd: safePasswd, loginTime: time.getUnixTimeStamp(), isLogin: false } // 加密模块 // 尝试查找账户 let [err,userData] = await c.login(owner, passwd); if(err){ console.log(err); log.warn(`[用户登录] 登陆失败 ${err.eMsg||err.message}`); controlError(res, err,`登陆失败 ${err.eMsg||err.message}`); }else{ console.log(userData); loginData.isLogin = true; loginData.userId = userData['id']; // 存储用户状态到session req.session[progressField.session_hfy] = userData; success(res, userData); } // todo 登录日志 // [err,isOk] = await c_user.saveLoginData(loginData); }catch (e) { console.log(e); ServerError(res, null, e.message); } }); router.post('/loadAccounts', checkLogin(progressField.session_hfy), async (req, res) => { try{ let err, result; let {key, l, p, type} = req.query; let account = req.session[progressField.session_hfy]; type = type || 'all'; l = typeTool.toNumber(l); p = typeTool.toNumber(p); [err, result] = await c.loadAccount(account.userId, p, l); if(err){ log.info(`[用户列表] 加载失败 ${err.message}`); return controlError(res, err, null);} searchSuccess(res, result.arr, result.total, result.page, result.limit, ); }catch (e) { ServerError(res, null, e.message); } }); router.get('/logout', async (req, res) => { try{ req.session[progressField.session_hfy] = null; success(res, null); }catch (e) { console.log(e); ServerError(res, null, e.message); } }); module.exports = router;