login_controller.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. /**
  2. * 登录相关控制器
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/8
  6. * @version
  7. */
  8. import UserModel from "../models/user_model";
  9. import SettingModel from "../models/setting_model";
  10. import CompilationModel from "../models/compilation_model";
  11. // import Captcha from "../models/captcha";
  12. // 验证码
  13. const Captcha = require("../models/captcha");
  14. class LoginController {
  15. /**
  16. * 登录页面
  17. *
  18. * @param {object} request
  19. * @param {object} response
  20. * @return {void}
  21. */
  22. async index(request, response) {
  23. let sessionUser = request.session.sessionUser;
  24. if (sessionUser !== undefined && sessionUser.ssoId >= 0) {
  25. return response.redirect("/pm");
  26. }
  27. response.render('users/html/login', {});
  28. }
  29. /**
  30. * 登录操作
  31. *
  32. * @param {object} request
  33. * @param {object} response
  34. * @return {string}
  35. */
  36. async login(request, response) {
  37. let account = request.body.account;
  38. let password = request.body.pw;
  39. let preferenceSetting = {};
  40. let compilationList = [];
  41. try {
  42. // 调用接口验证登录信息
  43. let userModel = new UserModel();
  44. let responseData = await userModel.getInfoFromSSO(account, password);
  45. responseData = JSON.parse(responseData);
  46. if (typeof responseData !== 'object') {
  47. throw '邮箱/手机 或 密码错误';
  48. }
  49. if (responseData.length <= 0) {
  50. throw '接口返回数据错误';
  51. }
  52. // 正确登录后 存入session
  53. let userData = responseData[0];
  54. if (userData.mobile === '') {
  55. return response.json({error: 2,ssoId: userData.id});
  56. }
  57. //还要判断account是否是专业版用户
  58. // let isPro = true;
  59. // const userInfo = await userModel.findDataByAccount(account);
  60. //
  61. // if (userInfo && userInfo.upgrade_list !== undefined) {
  62. // for (const ul of userInfo.upgrade_list) {
  63. // if (ul.isUpgrade === true) {
  64. // isPro = true;
  65. // break;
  66. // }
  67. // }
  68. // }
  69. // 专业版短信验证码验证
  70. // if (isPro) {
  71. // const codeMsg = request.session.code;
  72. // if (codeMsg !== undefined && request.body.code !== '') {
  73. // const code = codeMsg.split('_')[0];
  74. // const time = codeMsg.split('_')[1];
  75. // console.log(code);
  76. // console.log(request.body.code);
  77. // if (Date.parse(new Date())/1000 > time+60*5 || request.body.code !== code) {
  78. // return response.json({error: 3, msg: '验证码错误。'});
  79. // } else {
  80. // delete request.session.code;
  81. // }
  82. // } else {
  83. // return response.json({error: 3, msg: '验证码错误。'});
  84. // }
  85. // }
  86. // 判断极验验证码是否通过
  87. const captcha = new Captcha();
  88. const captchResult = await captcha.validate(request);
  89. if (!captchResult) {
  90. throw '极验验证码错误';
  91. }
  92. let sessionUser = {
  93. ssoId: userData.id,
  94. username: userData.username,
  95. email: userData.useremail,
  96. mobile: userData.mobile,
  97. };
  98. request.session.sessionUser = sessionUser;
  99. // 记录用户数据到数据库
  100. let result = await userModel.markUser(sessionUser, request);
  101. // 获取偏好设置
  102. let settingModel = new SettingModel();
  103. preferenceSetting = await settingModel.getPreferenceSetting(request.session.sessionUser.id);
  104. if (!result) {
  105. throw '标记用户信息失败!';
  106. }
  107. let compilationModel = new CompilationModel();
  108. if(preferenceSetting.login_ask === 1 || preferenceSetting.select_version === ''){
  109. preferenceSetting.login_ask = 1;
  110. compilationList = await compilationModel.getList();
  111. }
  112. else{
  113. compilationList = [];
  114. }
  115. // 获取编办信息
  116. let sessionCompilation = request.session.sessionCompilation;
  117. if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
  118. preferenceSetting.select_version !== '') {
  119. let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
  120. // 判断当前用户的是使用免费版还是专业版
  121. let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
  122. request.session.compilationVersion = compilationVersion;
  123. request.session.sessionCompilation = compilationData;
  124. if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
  125. }
  126. } catch (error) {
  127. console.log(error);
  128. return response.json({error: 1, msg: error});
  129. }
  130. request.session.online_start_time = +new Date();
  131. console.log(`${request.session.sessionUser.real_name}--id:${request.session.sessionUser.id}--登录了系统`);
  132. response.json({
  133. error: 0,
  134. msg: '',
  135. login_ask: preferenceSetting.login_ask,
  136. compilation_list: JSON.stringify(compilationList),
  137. last_page: request.session.lastPage
  138. });
  139. }
  140. /**
  141. * 验证码注册
  142. *
  143. * @param {object} request
  144. * @param {object} response
  145. * @return {string}
  146. */
  147. async captcha(request, response) {
  148. const captcha = new Captcha();
  149. const res = await captcha.register(request);
  150. response.json(res);
  151. }
  152. /**
  153. * 判断用户是否是专业版用户
  154. * @param request
  155. * @param response
  156. * @returns {Promise<void>}
  157. */
  158. // async accountIsPro(request, response) {
  159. // let res = {
  160. // error: 0,
  161. // msg: '',
  162. // result: false,
  163. // };
  164. // try{
  165. // const account = request.body.account;
  166. // const password = request.body.pw;
  167. //
  168. // // 根据邮箱或手机号获取账号信息
  169. // let userModel = new UserModel();
  170. // // 调用接口验证登录信息
  171. // let responseData = await userModel.getInfoFromSSO(account, password);
  172. // console.log(responseData);
  173. // // 先判断返回值是否为未激活状态
  174. // if ( responseData === '-3') {
  175. // throw '因邮箱未完成认证,账号未激活;去<a href="https://sso.smartcost.com.cn" target="_blank">激活</a>。';
  176. // }
  177. // responseData = JSON.parse(responseData);
  178. // if (typeof responseData !== 'object') {
  179. // throw '邮箱/手机 或 密码错误';
  180. // }
  181. //
  182. // if (responseData.length <= 0) {
  183. // throw '接口返回数据错误';
  184. // }
  185. //
  186. // // 正确登录后 存入session
  187. // let userData = responseData[0];
  188. //
  189. // if (userData.mobile === '') {
  190. // return response.json({error: 2,ssoId: userData.id});
  191. // }
  192. //
  193. // // const userInfo = await userModel.findDataByAccount(account);
  194. // // if (userInfo && userInfo.upgrade_list !== undefined) {
  195. // // for (const ul of userInfo.upgrade_list) {
  196. // // if (ul.isUpgrade === true) {
  197. // // res.result = true;
  198. // // res.data = userInfo.mobile;
  199. // // break;
  200. // // }
  201. // // }
  202. // // } else {
  203. // // res.msg = '当前未存在此用户';
  204. // // }
  205. // res.result = true;
  206. // // if (userInfo) {
  207. // // res.data = userInfo.mobile;
  208. // // } else {
  209. // res.data = userData.mobile;
  210. // // }
  211. // } catch (err) {
  212. // res.error = 1;
  213. // res.msg = err;
  214. // }
  215. //
  216. // response.json(res);
  217. // }
  218. }
  219. export default LoginController;