login_controller.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. class LoginController {
  12. /**
  13. * 登录页面
  14. *
  15. * @param {object} request
  16. * @param {object} response
  17. * @return {void}
  18. */
  19. async index(request, response) {
  20. let sessionUser = request.session.sessionUser;
  21. if (sessionUser !== undefined && sessionUser.ssoId >= 0) {
  22. return response.redirect("/pm");
  23. }
  24. response.render('users/html/login', {});
  25. }
  26. /**
  27. * 登录操作
  28. *
  29. * @param {object} request
  30. * @param {object} response
  31. * @return {string}
  32. */
  33. async login(request, response) {
  34. let account = request.body.account;
  35. let password = request.body.pw;
  36. let preferenceSetting = {};
  37. let compilationList = [];
  38. try {
  39. // 调用接口验证登录信息
  40. let userModel = new UserModel();
  41. let responseData = await userModel.getInfoFromSSO(account, password);
  42. // 先判断返回值是否为未激活状态
  43. if ( responseData === '-3') {
  44. throw '因邮箱未完成认证,账号未激活;去<a href="https://sso.smartcost.com.cn" target="_blank">激活</a>。';
  45. }
  46. responseData = JSON.parse(responseData);
  47. if (typeof responseData !== 'object') {
  48. throw '邮箱/手机 或 密码错误';
  49. }
  50. if (responseData.length <= 0) {
  51. throw '接口返回数据错误';
  52. }
  53. // 正确登录后 存入session
  54. let userData = responseData[0];
  55. if (userData.mobile === '') {
  56. return response.json({error: 2,ssoId: userData.id});
  57. }
  58. let sessionUser = {
  59. ssoId: userData.id,
  60. username: userData.username,
  61. email: userData.useremail,
  62. mobile: userData.mobile,
  63. };
  64. request.session.sessionUser = sessionUser;
  65. // 记录用户数据到数据库
  66. let result = await userModel.markUser(sessionUser, request);
  67. // 获取偏好设置
  68. let settingModel = new SettingModel();
  69. preferenceSetting = await settingModel.getPreferenceSetting(request.session.sessionUser.id);
  70. if (!result) {
  71. throw '标记用户信息失败!';
  72. }
  73. let compilationModel = new CompilationModel();
  74. if(preferenceSetting.login_ask === 1 || preferenceSetting.select_version === ''){
  75. preferenceSetting.login_ask = 1;
  76. compilationList = await compilationModel.getList();
  77. }
  78. else{
  79. compilationList = [];
  80. }
  81. // 获取编办信息
  82. let sessionCompilation = request.session.sessionCompilation;
  83. if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
  84. preferenceSetting.select_version !== '') {
  85. let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
  86. // 判断当前用户的是使用免费版还是专业版
  87. let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
  88. request.session.compilationVersion = compilationVersion;
  89. request.session.sessionCompilation = compilationData;
  90. if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
  91. }
  92. } catch (error) {
  93. console.log(error);
  94. return response.json({error: 1, msg: error});
  95. }
  96. console.log(`${request.session.sessionUser.real_name}--id:${request.session.sessionUser.id}--登录了系统`);
  97. response.json({
  98. error: 0,
  99. msg: '',
  100. login_ask: preferenceSetting.login_ask,
  101. compilation_list: JSON.stringify(compilationList),
  102. last_page: request.session.lastPage
  103. });
  104. }
  105. }
  106. export default LoginController;