login_controller.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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}
  18. */
  19. index(request, response) {
  20. let renderData = {
  21. layout: false,
  22. };
  23. response.render('users/views/login/index', renderData);
  24. }
  25. /**
  26. * 登录操作
  27. *
  28. * @param {object} request
  29. * @param {object} response
  30. * @return {string}
  31. */
  32. async login(request, response) {
  33. let username = request.body.username;
  34. let password = request.body.password;
  35. let managerModel = new ManagerModel();
  36. let responseData = {
  37. error: 0,
  38. msg: ''
  39. };
  40. try {
  41. let managerData = await managerModel.findDataByCondition({username: username});
  42. // 没有找到对应数据
  43. if (managerData === null || managerData._id === undefined) {
  44. throw {code: 44001, err: '用户名或密码错误'};
  45. }
  46. // 加密密码
  47. let encryptPassword = managerModel.encryptPassword(managerData.token, password);
  48. if (encryptPassword !== managerData.password) {
  49. throw {code: 44001, err: '用户名或密码错误'};
  50. }
  51. // 成功后写入session
  52. let currentTime = new Date().getTime();
  53. let sessionToken = crypto.createHmac('sha1', currentTime + '').update(managerData.username)
  54. .digest().toString('base64');
  55. let managerSession = {
  56. username: managerData.username,
  57. loginTime: currentTime,
  58. sessionToken: sessionToken,
  59. };
  60. request.session.managerData = managerSession;
  61. } catch (error) {
  62. responseData.error = error.code;
  63. responseData.msg = error.err;
  64. }
  65. response.json(responseData);
  66. }
  67. /**
  68. * 退出操作
  69. *
  70. * @param {object} request
  71. * @param {object} response
  72. * @return {void}
  73. */
  74. logout(request, response) {
  75. // 清空session
  76. request.session.destroy();
  77. response.redirect('/login');
  78. }
  79. }
  80. export default LoginController;