login_controller.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /**
  2. * 登录页面控制器
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/1
  6. * @version
  7. */
  8. import BaseController from "../../common/base/base_controller";
  9. import ManagerModel from "../models/manager_model";
  10. import crypto from "crypto";
  11. class LoginController extends BaseController {
  12. /**
  13. * 登录页面
  14. *
  15. * @param {object} request
  16. * @param {object} response
  17. * @return {void|Mixed}
  18. */
  19. index(request, response) {
  20. let renderData = {
  21. layout: false,
  22. };
  23. let managerSessionData = request.session.managerData;
  24. if (managerSessionData !== undefined) {
  25. return response.redirect("/dashboard");
  26. }
  27. response.render('users/views/login/index', renderData);
  28. }
  29. /**
  30. * 登录操作
  31. *
  32. * @param {object} request
  33. * @param {object} response
  34. * @return {string}
  35. */
  36. async login(request, response) {
  37. let username = request.body.username;
  38. let password = request.body.password;
  39. let managerModel = new ManagerModel();
  40. let responseData = {
  41. error: 0,
  42. msg: ''
  43. };
  44. try {
  45. let managerData = await managerModel.findDataByCondition({username: username});
  46. // 没有找到对应数据
  47. if (managerData === null || managerData._id === undefined) {
  48. throw {code: 44001, err: '用户名或密码错误'};
  49. }
  50. // 加密密码
  51. let encryptPassword = managerModel.encryptPassword(managerData.token, password);
  52. if (encryptPassword !== managerData.password) {
  53. throw {code: 44001, err: '用户名或密码错误'};
  54. }
  55. // 成功后写入session
  56. let currentTime = new Date().getTime();
  57. let sessionToken = crypto.createHmac('sha1', currentTime + '').update(managerData.username)
  58. .digest().toString('base64');
  59. let managerSession = {
  60. username: managerData.username,
  61. loginTime: currentTime,
  62. sessionToken: sessionToken,
  63. userID: managerData.id
  64. };
  65. request.session.managerData = managerSession;
  66. } catch (error) {
  67. responseData.error = error.code;
  68. responseData.msg = error.err;
  69. }
  70. response.json(responseData);
  71. }
  72. /**
  73. * 退出操作
  74. *
  75. * @param {object} request
  76. * @param {object} response
  77. * @return {void}
  78. */
  79. logout(request, response) {
  80. // 清空session
  81. request.session.destroy();
  82. response.redirect('/login');
  83. }
  84. }
  85. export default LoginController;