Login.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. const { v4: uuidv4 } = require('uuid');
  2. const API = require("../../lib/API");
  3. const bcryptjs = require('bcryptjs');
  4. const { BaseStdResponse } = require("../../BaseStdResponse");
  5. const db = require("../../plugin/DataBase/db");
  6. const Redis = require('../../plugin/DataBase/Redis');
  7. // 用户登录
  8. class Login extends API {
  9. constructor() {
  10. super();
  11. this.setMethod("POST");
  12. this.setPath("/User/Login");
  13. }
  14. async onRequest(req, res) {
  15. let { username, password, captcha, id } = req.body;
  16. if ([username, password, captcha, id].some(value => value === '' || value === null || value === undefined)) {
  17. res.json({
  18. ...BaseStdResponse.MISSING_PARAMETER,
  19. endpoint: 1513126
  20. });
  21. return;
  22. }
  23. password = atob(password);
  24. try {
  25. const code = await Redis.get(`captcha:${id}`);
  26. if (!code || code != captcha.toLowerCase())
  27. return res.json({
  28. ...BaseStdResponse.ERR,
  29. msg: '验证码错误或已过期!'
  30. })
  31. Redis.del(`captcha:${id}`);
  32. } catch (err) {
  33. this.logger.error(`验证图片验证码失败!${err.stack}`);
  34. return res.json({
  35. ...BaseStdResponse.DATABASE_ERR,
  36. msg: '验证失败!'
  37. })
  38. }
  39. let sql = 'SELECT * FROM users WHERE username = ?';
  40. let rows = await db.query(sql, [username]);
  41. if (!rows || rows.length !== 1 || !bcryptjs.compareSync(password, rows[0].password))
  42. return res.json({
  43. ...BaseStdResponse.ERR,
  44. msg: '用户名或密码错误'
  45. })
  46. const session = uuidv4();
  47. const time = new Date().getTime()
  48. sql = 'UPDATE users SET session = ?, lastTime = ? WHERE id = ?';
  49. let result = await db.query(sql, [session, time, rows[0].id]);
  50. if (result && result.affectedRows > 0) {
  51. res.json({
  52. ...BaseStdResponse.OK,
  53. data: {
  54. uuid: rows[0].uuid,
  55. username: rows[0].username,
  56. session,
  57. roles: rows[0].permission || [],
  58. vip: rows[0].vip,
  59. ic_count: rows[0].ic_count,
  60. lepao_count: rows[0].lepao_count,
  61. crouse_count: rows[0].crouse_count,
  62. avatar: rows[0].avatar,
  63. email: rows[0].email
  64. }
  65. });
  66. } else {
  67. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '登录失败!' });
  68. }
  69. }
  70. }
  71. module.exports.Login = Login;