Login.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. });
  20. return;
  21. }
  22. password = atob(password);
  23. try {
  24. const code = await Redis.get(`captcha:${id}`);
  25. if (!code || code != captcha.toLowerCase())
  26. return res.json({
  27. ...BaseStdResponse.ERR,
  28. msg: '验证码错误或已过期!'
  29. })
  30. Redis.del(`captcha:${id}`);
  31. } catch (err) {
  32. this.logger.error(`验证图片验证码失败!${err.stack}`);
  33. return res.json({
  34. ...BaseStdResponse.DATABASE_ERR,
  35. msg: '验证失败!'
  36. })
  37. }
  38. let sql = 'SELECT * FROM users WHERE username = ?';
  39. let rows = await db.query(sql, [username]);
  40. if (!rows || rows.length !== 1 || !rows[0].password|| !bcryptjs.compareSync(password, rows[0].password))
  41. return res.json({
  42. ...BaseStdResponse.ERR,
  43. msg: '用户名或密码错误'
  44. })
  45. const session = uuidv4()
  46. await Redis.set(`userSession:${rows[0].uuid}`, session, {
  47. EX: 2592000
  48. })
  49. res.json({
  50. ...BaseStdResponse.OK,
  51. data: {
  52. uuid: rows[0].uuid,
  53. username: rows[0].username,
  54. session,
  55. roles: rows[0].permission || [],
  56. vip: rows[0].vip,
  57. ic_count: rows[0].ic_count,
  58. lepao_count: rows[0].lepao_count,
  59. crouse_count: rows[0].crouse_count,
  60. avatar: rows[0].avatar,
  61. email: rows[0].email
  62. }
  63. })
  64. const time = new Date().getTime()
  65. sql = 'UPDATE users SET lastTime = ? WHERE id = ?';
  66. await db.query(sql, [time, rows[0].id]);
  67. }
  68. }
  69. module.exports.Login = Login;