r_user.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. const router = require('express').Router();
  2. const {paramFail, ServerError, success, controlError, searchSuccess} = require("../tools/result");
  3. const c = require("../control/c_user");
  4. const typeTool = require("../tools/typeTool_cjs");
  5. const decode = require("../tools/decode_cjs");
  6. const time = require("../tools/time_cjs");
  7. const {toSqlString} = require("../tools/searchSql");
  8. const progressField = require('../map/progressField');
  9. const {isEmpty} = require("../tools/typeTool_cjs");
  10. const checkLogin = require("../middleware/checkSession");
  11. const log = require("../logger").logger("r_user","info");
  12. router.post('/login', async (req, res) => {
  13. try{
  14. // let isOk = null;
  15. let loginData = {};
  16. // let {owner, passwd, captcha} = req.body;
  17. let body = req.body;
  18. if(isEmpty(body)){
  19. paramFail(res, "body is required");
  20. return;
  21. }
  22. let {owner, passwd, captcha} = req.body;
  23. if(!owner || !passwd || !captcha){
  24. paramFail(res, "owner or password or captcha is required");
  25. return;
  26. }
  27. // 检查验证码
  28. if (captcha.toLowerCase() !== req.session.captcha) return paramFail(res,`验证码错误` );
  29. // 转义解码参数
  30. let safePasswd = toSqlString(passwd);
  31. owner = toSqlString(owner);
  32. // 解密模块.
  33. passwd = decode.decodePasswd(passwd);
  34. // 转为数据库存储数据
  35. passwd = decode.passwdToSave(passwd);
  36. // 生成登陆记录
  37. loginData = {
  38. loginIp: req.ip.match(/\d+\.\d+\.\d+\.\d+/),
  39. account: owner,
  40. passwd: safePasswd,
  41. loginTime: time.getUnixTimeStamp(),
  42. isLogin: false
  43. }
  44. // 加密模块
  45. // 尝试查找账户
  46. let [err,userData] = await c.login(owner, passwd);
  47. if(err){
  48. console.log(err);
  49. log.warn(`[用户登录] 登陆失败 ${err.eMsg||err.message}`);
  50. controlError(res, err,`登陆失败 ${err.eMsg||err.message}`);
  51. }else{
  52. console.log(userData);
  53. loginData.isLogin = true;
  54. loginData.userId = userData['id'];
  55. // 存储用户状态到session
  56. req.session[progressField.session_hfy] = userData;
  57. success(res, userData);
  58. }
  59. // todo 登录日志
  60. // [err,isOk] = await c_user.saveLoginData(loginData);
  61. }catch (e) {
  62. console.log(e);
  63. ServerError(res, null, e.message);
  64. }
  65. });
  66. router.post('/loadAccounts', checkLogin(progressField.session_hfy), async (req, res) => {
  67. try{
  68. let err, result;
  69. let {key, l, p, type} = req.query;
  70. let account = req.session[progressField.session_hfy];
  71. type = type || 'all';
  72. l = typeTool.toNumber(l);
  73. p = typeTool.toNumber(p);
  74. [err, result] = await c.loadAccount(account.userId, p, l);
  75. if(err){
  76. log.info(`[用户列表] 加载失败 ${err.message}`);
  77. return controlError(res, err, null);}
  78. searchSuccess(res,
  79. result.arr,
  80. result.total,
  81. result.page,
  82. result.limit,
  83. );
  84. }catch (e) {
  85. ServerError(res, null, e.message);
  86. }
  87. });
  88. router.get('/logout', async (req, res) => {
  89. try{
  90. req.session[progressField.session_hfy] = null;
  91. success(res, null);
  92. }catch (e) {
  93. console.log(e);
  94. ServerError(res, null, e.message);
  95. }
  96. });
  97. module.exports = router;