login_controller.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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.validLogin(username, password);
  46. // 成功后写入session
  47. let currentTime = new Date().getTime();
  48. let sessionToken = crypto.createHmac('sha1', currentTime + '').update(managerData.username)
  49. .digest().toString('base64');
  50. let managerSession = {
  51. username: managerData.username,
  52. loginTime: currentTime,
  53. sessionToken: sessionToken,
  54. userID: managerData.id,
  55. permission: managerData.permission === undefined ? '' : managerData.permission,
  56. superAdmin: managerData.super_admin
  57. };
  58. request.session.managerData = managerSession;
  59. // 更新登录信息
  60. let ip = request.connection.remoteAddress;
  61. ip = ip.split(':');
  62. ip = ip[3] === undefined ? '' : ip[3];
  63. let updateData = {
  64. login_ip: ip,
  65. last_login: new Date().getTime()
  66. };
  67. let updateResult = managerModel.updateById(managerData._id, updateData);
  68. if (!updateResult) {
  69. throw '更新登录信息失败!';
  70. }
  71. } catch (error) {
  72. responseData.error = error.code;
  73. responseData.msg = error.err;
  74. }
  75. response.json(responseData);
  76. }
  77. /**
  78. * 退出操作
  79. *
  80. * @param {object} request
  81. * @param {object} response
  82. * @return {void}
  83. */
  84. logout(request, response) {
  85. // 清空session
  86. request.session.destroy();
  87. response.redirect('/login');
  88. }
  89. }
  90. export default LoginController;